#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;