Задавайте вопросы, мы ответим
Вы не зашли.
Не выводит записи, где count = 0. Группировка есть, где я не прав?
SELECT
catalogs.id,
COUNT (DISTINCT comments.id) AS comments
FROM catalogs
LEFT JOIN comments ON catalogs.id = comments.catalog
WHERE catalogs.removed = 0 AND comments.removed = 0
GROUP BY catalog.id
ORDER BY catalog.id
Отредактированно wine-time (10.10.2013 16:10:37)
Неактивен
Приведите пример с тестовыми данными на которых видна проблема.
Неактивен
Отредактированно wine-time (11.10.2013 10:15:46)
Неактивен
Так вы сами отсекаете их условием WHERE comments.removed = 0
Для наглядности выполните на тестовых значениях:
Неактивен
Т.е. вместо условия на count, я поставил условие на всю выборку..
Спасибо вам большое.
Неактивен
UPD: простите, снова вопрос. прочитал про is null, обрадовался новым знаниям.
Вы были правы, мне нужный последний запрос,
Отредактированно wine-time (14.10.2013 11:40:48)
Неактивен
В корне неправы. Выполните:
Неактивен
Спасибо, что тратите своё время.
Сейчас медленно понимаю, что mysql просто соберёт для меня огромную таблицу и я на неё пытаюсь наложить взаимоисключающие условия.
В запросе пишет про ошибку на четвертой строке. Логику запроса понял, но посмотрите, пожалуйста, в чём может быть ошибка (я с агрегатными фунциями и условиями не работал пока).
Мне ещё предложили такой вариант, работоспособный:
Неактивен
wine-time написал:
В запросе пишет про ошибку на четвертой строке. Логику запроса понял, но посмотрите, пожалуйста, в чём может быть ошибка (я с агрегатными фунциями и условиями не работал пока).
Скобки потерял, нужно
SUM(IF((comments.c_is_open=0 or comments.removed is null),1,0)) as closed
wine-time написал:
Но вот как перенесли условия из WHERE в ON я не очень понимаю. Вы не раскроете идею?
Для наглядности выполните этот запрос бех группировки, т.е.
Неактивен
А запрос теперь работает, но выводит все: 0, закрытых: 1
Орфографию я пробовал поправить по логике, всё равно неправильно отрабатывает..
Отредактированно wine-time (14.10.2013 21:06:01)
Неактивен
Запрос покажите.
Неактивен
Который я просил посмотреть на 4 строке, всё тот же. Я орфографические ошибки убрал только.
Отредактированно wine-time (14.10.2013 21:42:00)
Неактивен
Возвращаемся к началу, тестовые данные приведите.
Неактивен
И правда к началу. Так пойдёт или накидат тестовую и дать дамп?
Каталоги
id
1
2
3
4
5
Что-то ещё, пускай комментарии
id catalog removed is_open
1 1 1 1
2 1 1 1
3 1 0 0
4 3 0 1
5 4 0 1
6 4 0 0
7 4 1 0
8 4 0 1
UPD, если кому нужно, нашёл использование с таким синтаксисом
SELECT count(id),
SUM(hour) as totHour,
SUM(case when kind = 1 then 1 else 0 end) as countKindOne
Отредактированно wine-time (14.10.2013 22:05:28)
Неактивен
Неактивен
Да, я как раз про 2 и 5 каталоги.
comments: 0
closed: 1
Если что, нашёл использование if (обновил предыдущий комментарий), без вас не дошёл бы до идеи, спасибо большое за ответы.
Отредактированно wine-time (14.10.2013 22:08:06)
Неактивен
Выполните запрос без группировки, сразу станет понятна причина:
Неактивен
Не помогли мне запросы понять что-либо
Для меня логика топика строится так:
• описал проблему, получил пример запроса
• запрос не работает, спросил в чем ошибка, получил ответ
• запрос заработал, но выдает некорректную выборку
• спросил об этом, снова попросили описать ситуацию
• описал ситуацию, получил несколько запросов, которые для меня должны что-то прояснить
Спасибо вам за идею использования агрегации, но уж слишком вы усложняете процесс поиска ответа.
Неактивен
Каков вопрос, таков ответ. Вы не описываете проблему, и я могу лишь догадываться что вам нужно, а это (догадываться) не моя сильная сторона.
По последнему, вы говорите, что выборка (comments: 0; closed: 1) некорректна. Почему? Неясно. Можно лишь предположить, что вам нужно
COUNT(*) AS comments,
вместо
COUNT(DISTINCT comments.id) AS comments,
P.S. Если бы описали какую выборку хотите получить на тестовых данных и почему она должна быть такой, то и ответ вас вероятно бы устроил сразу.
Неактивен