/ / Отримання порожніх результатів для запиту "COUNT" / "GROUP BY" MySQL - mysql, sql, select, count, group-by

Отримання порожніх результатів для "COUNT" / "GROUP BY" MySQL Query - mysql, sql, select, count, group-by

Я маю подібну проблему, що й проблема, опублікована тут: Як я можу отримати непорожній результуючий набір при використанні вибору, групування та підрахунку?

Проте, дане рішення повільніше, згадується відповідачем. Мені було цікаво, чи є альтернативне рішення без шкоди для продуктивності?

Крім того, я не розумію, чому запит на зразок:

SELECT
`a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
GROUP BY `a`,`b`

поверне порожній результат, якщо тільки без частини "GROUP BY" він показує очікуваний результат з 0 як значення підрахунку? Чи може це бути можлива помилка mysql?

Я також знайшов дискусію на порталі помилок mysql, з подібною проблемою, тут: http://bugs.mysql.com/bug.php?id=26087

Але ця дискусія недостатньо зріла, щоб отримати відповідну відповідь.

Мої запитання:

  • Чи може це бути можлива помилка mysql?
  • Чи можна мати краще альтернативне рішення, ніж дане (посилання на початку)? Якщо так, то як?

Відповіді:

2 для відповіді № 1

Це не помилка MySQL.

Запит агрегації повертає один рядок на групу. Без a group by, є одна група - вся таблиця. Я визнаю, що це трохи складніше, тому що є ще одна група, навіть якщо в таблиці немає рядків.

З group by, є один рядок на групу. Якщо в групі немає рядків, група не з'являється. У вашому випадку запит:

SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1

Повернеться один рядок, з двома NULLслідом за ними 0.

Той самий запит із:

GROUP BY `a`,`b`

не буде повертати жодних рядків, оскільки немає рядків для формування груп.


0 для відповіді № 2

Насправді, це не помилка MySQL. Але ви можете визначити похідну таблицю, а потім порахувати її результати.

SELECT
`a`, `b`, COUNT(*) as `c`
FROM ( SELECT `a`, `b`
FROM `mytable`
WHERE `status` = 1
GROUP BY `a`,`b`) t