Count () сколько раз имя появляется в таблице с остальной информацией - PullRequest
0 голосов
/ 21 января 2020

Я читал на различных веб-сайтах о функции count(), но я все еще не могу сделать эту работу.

Я создал небольшую таблицу с (id, имя, фамилия, возраст), и мне нужно получить все столбцы плюс новый. В этом новом столбце я хочу показать, сколько раз имя появляется или повторяется в таблице.

Я сделал тест и могу получить, но только КОЛОННОЕ ИМЯ со столбцом подсчета, но я не был возможность получить все данные из таблицы.

В настоящее время у меня есть это

   select a.n_showsup, p.*
   from [test1].[dbo].[person] p,
   (select count(*) n_showsup
    from [test1].[dbo].[person])a

Это дает мне все данные на выходе, но в столбце n_showsup это дает мне только количество строк, теперь Я знаю, что это потому, что мне не хватает GROUP BY, но потом, когда я пишу группу по имени, это показывает мне много записей. Вот пример того, что мне нужно:

test table

Ответы [ 2 ]

5 голосов
/ 21 января 2020

Вы можете использовать оконные функции, если ваша СУБД поддерживает их:

select t.*, count(*) over(partition by name) n_showsup
from mytable t

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

select t.*, x.n_showsup
from mytable t
inner join (select name, count(*) n_showsup from mytable group by name) x
    on x.name = t.name
1 голос
/ 21 января 2020

В то время как подход оконной функции (ответ @ GMB) является верным путем к go, продумывание этого подхода с использованием подзапроса (как вы и направлялись) будет выглядеть примерно так:

select p.*, a.n_showsup
from [test1].[dbo].[person] p
INNER JOIN (
    select name, count(*) n_showsup
    from [test1].[dbo].[person]
    GROUP BY name
) a ON p.name = a.name

Это ОЧЕНЬ близко к тому, что у вас было, разница в том, что мы группируем этот подзапрос по name (таким образом, мы получаем счетчик по имени), и мы можем использовать это в критериях соединения, которые мы делаем с предложением ON в что INNER JOIN.

Вы действительно никогда не должны использовать запятую в своем предложении FROM. Вместо этого используйте JOIN.

...