Фильтровать по КОЛИЧЕСТВУ (*)?

#mysql #sql

#mysql #sql

Вопрос:

Возможно ли сгруппировать результаты, а затем отфильтровать по количеству строк в группе?

Что-то вроде этого:

 SELECT * FROM mytable WHERE COUNT(*) > 1 GROUP BY name
  

Ответ №1:

Вы хотите использовать фильтрацию по агрегатной функции.

 SELECT name, COUNT(*)
    FROM mytable
    GROUP BY name
    HAVING COUNT(*) > 1
  

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

1. СУПЕРЗВЕЗДА! Как раз собираюсь это протестировать!

2. И предложение HAVING также должно предшествовать ORDER BY .

3. Вы также можете переименовать КОЛИЧЕСТВО (*) для удобства чтения. SELECT name, count(*) cnt FROM mytable GROUP BY name HAVING cnt > 1

Ответ №2:

Вам нужно использовать HAVING

 SELECT * FROM mytable GROUP BY name HAVING COUNT(*) > 1
  

Хотя, SELECT * не имеет особого смысла, когда вы группируете. Я предполагаю, что это просто для примера

Ответ №3:

Вам нужно предложение HAVING.

 SELECT *
FROM mytable
GROUP BY name
HAVING COUNT(*) > 1
  

Ответ №4:

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

 SELECT * FROM mytable GROUP BY name having COUNT(*) > 1