|
|
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Привет! Нужно подсчитать количество комментариев и товаров у фирмы. С одним COUNT(*) работает отлично: Код: sql 1. 2. 3. 4. А с двумя неправильно: num_reviews=num_products=COUNT(p.id) Код: sql 1. 2. 3. 4. 5. Что не так, как сделать, кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 01:36:39 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Там синтаксическая ошибка во втором примере, но это только в примере) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 01:38:06 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10Что не так, как сделать, кто знает?Связи между таблицами, повидимому, не "один к одному", а "один ко многим", вот и происходит "размножение". Варианты решения: 1) Добавить в агрегаты COUNT модификатор DISTINCT 2) Делать предагрегированные деривед-таблицы по table_reviews и table_products с последующим джойном их к таблице table_firm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 05:04:24 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10 Код: sql 1. 2. 3. Группировка "ниачём"... grecha10Что не так, как сделать, кто знает? Если f.id и p.id - синтетические ключи (или хотя бы просто уникальны), то COUNT(DISTINCT ...). Иначе - только подзапросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 08:56:31 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Спасибо! Все сделал через DISTINCT 2) Делать предагрегированные деривед-таблицы по table_reviews и table_products с последующим джойном их к таблице table_firm Что то я не могу представить как вставить COUNT() в LEFT JOIN. Покажите пример плз, хоть и сделал уже, но очень интересно для расширения кругозора. SELECT f.*, -- поскипано GROUP BY f.id Группировка "ниачём"... Вы ошибаетесь. Без этой группировки работать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 10:11:49 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10, верно - не будет. Но и Акина - абсолютно прав - "ни а чем"... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 10:26:57 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10Что то я не могу представить как вставить COUNT() в LEFT JOIN. Покажите пример плз, хоть и сделал уже, но очень интересно для расширения кругозора. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 10:48:29 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Arhat109grecha10, верно - не будет. Но и Акина - абсолютно прав - "ни а чем"... :) Хм) Всегда считал выражение "ниачем" синонимом к "ни к чему, лишнее, пустое, не нужное". Какое же оно "не нужное" если без него не работает? tanglir, спасибо! Только не понял почему t.amt является синонимом для COUNT() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 11:03:51 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
tanglir, вот честно не понял, зачем ты в деривед-таблицы засунул джойны на родительскую таблицу? Что мешало просто группировать дочернюю таблицу, без её джойна на родителя, а уж после джойнить к родителю результат агрегации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 11:05:00 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхвот честно не понял, зачем ты в деривед-таблицы засунул джойны на родительскую таблицу?я сейчас смотрю и сам не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 11:05:48 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10Только не понял почему t.amt является синонимом для COUNT()потому что мне надо было написать count(*) as amt виноват, обещаю исправиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 11:06:21 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
grecha10Всегда считал выражение "ниачем" синонимом к "ни к чему, лишнее, пустое, не нужное". Какое же оно "не нужное" если без него не работает?Всё это - синонимы к выражению "ни о чём". В данном же случае, да и вообще, смысл использованного выражения в том, что результат действа, о котором сказано, что оно "ниачём", либо неверно прогнозируется, либо вообще не прогнозируется, но по-любому получится ерунда. Вот будь на том месте Код: sql 1. 2. 3. так никто бы и не возмущался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 13:03:14 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
tanglir, Akina, спасибо за разъяснения. Я реально стал умнее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 14:15:49 |
|
||
|
Два COUNT(*) в LEFT JOIN. Как?
|
|||
|---|---|---|---|
|
#18+
Akinagrecha10Всегда считал выражение "ниачем" синонимом к "ни к чему, лишнее, пустое, не нужное". Какое же оно "не нужное" если без него не работает?Всё это - синонимы к выражению "ни о чём". В данном же случае, да и вообще, смысл использованного выражения в том, что результат действа, о котором сказано, что оно "ниачём", либо неверно прогнозируется, либо вообще не прогнозируется, но по-любому получится ерунда. Вот будь на том месте Код: sql 1. 2. 3. так никто бы и не возмущался...В MySQL группировка "оптимизирована" как раз для таких случаев То есть (почти дословно по мануалу), если значения во всех строках дублируются. то их можно не указывать в GROUP BY, достаточно указать одно поле для группировки. Что в данном случае и выполняется Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2013, 16:51:23 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=209&tid=1836103]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 362ms |

| 0 / 0 |
