MySQL: GROUP BY устовия для COUNT(*)

310
26 ноября 2016, 20:18

Как задать максимальный и минимальный размеры группы, чтобы получить записи, где count < 5 и count > 2?

На данный момент использую такой запрос:

SELECT id, info, COUNT(*) as count
FROM notification
GROUP BY info ORDER BY count DESC;

Пример:

+----+-------+
| id |  info |
+----+-------+
|  1 | Admin |
|  2 |  User |
|  3 |  User |
|  4 |  User |
|  5 |  User |
|  6 |  User |
|  7 | Admin |
|  8 | Admin |
|  9 | Test  |
| 10 | Test  |
+----+-------+

Желаемый вывод:

+----+-------+--------+
| id |  info |  count |
+----+-------+--------+
|  1 | Admin |      3 |
+----+-------+--------+
Answer 1

Используйте параметр HAVING:

SELECT id, info, COUNT(*) as count 
FROM notification 
GROUP BY info
HAVING count(*) > 2
       and count(*) < 5
ORDER BY count DESC;

Пример на sqlfiddle.

Answer 2

Если таблица большая, то правильнее будет обернуть в другой запрос и написать условие в where. Работать будет быстрее.

SELECT * FROM   (
                SELECT id, info, COUNT(*) as count 
                FROM notification 
                GROUP BY info
                ) a
WHERE a.count > 2 AND a.count < 5
READ ALSO
Условие IF в триггере

Условие IF в триггере

Я вставляю данные в таблицу:

266
Ошибка 1142 при вставке данных в таблицу MySQL

Ошибка 1142 при вставке данных в таблицу MySQL

При выполнении вставки данных в таблицу я получаю ошибку:

432
Не проходит проверка столбца php/бд [закрыто]

Не проходит проверка столбца php/бд [закрыто]

Warning 1: mysql_query() expects parameter 1 to be string

237
Prepared Statements в Java , ошибка в синтаксисе!

Prepared Statements в Java , ошибка в синтаксисе!

Проблема в написании правильно строки с prepared statementom

259