Фильтр по количеству вхождений в таблицу SQL

#sql #sql-server #group-by #count #having-clause

#sql #sql-сервер #группировать по #количество #having-предложение

Вопрос:

Дана следующая таблица, в которой Name значение может повторяться в нескольких строках:

Таблица

Как мы можем определить, сколько раз Name значение существует в таблице, и можем ли мы фильтровать имена, которые имеют определенное количество вхождений.

Например, как я могу отфильтровать эту таблицу, чтобы показывать только имена, которые появляются дважды?

Ответ №1:

Вы можете использовать group by и having для отображения name s, которые появляются дважды в таблице:

 select name, count(*) cnt
from mytable
group by name
having count(*) = 2
  

Затем, если вам нужно общее количество имен, которые появляются дважды, вы можете добавить другой уровень агрегирования:

 select count(*) cnt
from (
    select name
    from mytable
    group by name
    having count(*) = 2
) t
  

Ответ №2:

Похоже, вы ищете гистограмму частоты подсчета имен. Что-то вроде этого

 with counts_cte(name, cnt) as (
    select name, count(*) 
    from mytable
    group by name)
select cnt, count(*) num_names
from counts_cte
group by cnt
order by 2 desc;
  

Ответ №3:

Вам нужно использовать предложение GROUP BY, чтобы найти количество имен, повторяющихся как

 select name, count(*) AS Repeated
from Your_Table_Name
group by name;
  

Если вы хотите показать только те, которые повторяются более одного раза. Затем используйте приведенный ниже запрос, который покажет те вхождения, которые встречаются более одного раза.

 select name, count(*) AS Repeated
from Your_Table_Name
group by name having count(*) > 1;