Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, уважаемые форумчане!
Бьюсь уже второй день...
Имеется: таблица shop
+----+------------------+
| id | name |
+----+------------------+
| 1 | AAA |
+----+------------------+
| 2 | BBB |
+----+------------------+
| 3 | CCC |
+----+------------------+
| 4 | DDD |
+----+------------------+
таблица parser
+----+------------------+---------+
| id | shop_id | sale |
+----+------------------+---------+
| 1 | 1 | 0 |
+----+------------------+---------+
| 2 | 1 | 0 |
+----+------------------+---------+
| 3 | 1 | 22 |
+----+------------------+---------+
| 4 | 2 | 33 |
+----+------------------+---------+
| 5 | 2 | 44 |
+----+------------------+---------+
| 6 | 3 | 0 |
+----+------------------+---------+
Цель: вывести список магазинов с подсчитанными полем no_sale, где sale=0, и полем sale, где sale!=0
+----+------------------+---------+---------+
| id | name | no_sale | sale |
+----+------------------+---------+---------+
| 1 | AAA | 2 | 1 |
+----+------------------+---------+---------+
| 2 | BBB | 0 | 2 |
+----+------------------+---------+---------+
| 3 | CCC | 1 | 0 |
+----+------------------+---------+---------+
| 4 | DDD | 0 | 0 |
+----+------------------+---------+---------+
Пока что дошел до такого запроса:
SELECT
shop.id AS id,
shop.name AS name,
COUNT(p.sale) AS no_sale,
COUNT(ps.sale) AS sale
FROM shop
LEFT JOIN parser p ON shop.id=p.shop_id && p.sale=0
LEFT JOIN parser ps ON shop.id=ps.shop_id && ps.sale!=0
GROUP BY shop.id
Но что-то он немного барахлит, например, для магазина AAA выдает no_sale = 2 и sale = 2
Не могу никак разобраться нормально с синтаксисом, помогите, пожалуйста)
Неактивен
Неактивен
Это потрясающе!
Спасибо большое! Даже и не знал о таких функциях в sql.
Правда, не совсем понимаю как это работает... И когда в parser вообще нет записей, соответствующих какому-то shop, в результате получает no_sale=0 и sale=1.
Прошу прощения за дубль темы, больше не повторится.
Неактивен
Неактивен
Спасибо большое!
я уже накрутил что-то такое, работающее, но некрасивое)
if(count(p.sale2)=0,0,sum(if(p.sale2=0,0,1))) AS sale,
Но Ваше решение безусловно элегантнее!) Спасибо!)
Отредактированно shark02807 (21.04.2015 16:51:44)
Неактивен