Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

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

#mysql #sql


Как задать максимальный и минимальный размеры группы, чтобы получить записи, где
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 |
+----+-------+--------+

    


Ответы

Ответ 1



Используйте параметр HAVING: SELECT id, info, COUNT(*) as count FROM notification GROUP BY info HAVING count(*) > 2 and count(*) < 5 ORDER BY count DESC; Пример на sqlfiddle.

Ответ 2



Если таблица большая, то правильнее будет обернуть в другой запрос и написать условие в where. Работать будет быстрее. SELECT * FROM ( SELECT id, info, COUNT(*) as count FROM notification GROUP BY info ) a WHERE a.count > 2 AND a.count < 5

Комментариев нет:

Отправить комментарий