82 votes

Somme de COUNT groupés dans une requête SQL

J'ai une table avec 2 champs :

ID  Name
--  -------
1   Alpha
2   Beta
3   Beta
4   Beta
5   Charlie
6   Charlie

Je veux les regrouper par nom, avec 'count', et une ligne 'SUM'

Name     Count
-------  -----
Alpha     1
Beta      3
Charlie   2
**SUM       6**

Comment puis-je écrire une requête pour ajouter une ligne SUM sous le tableau ?

4voto

Veuillez procéder comme suit :

Select sum(count) 
  from (select Name, 
               count(Name) as Count 
          from YourTable
      group by Name);  -- 6

4voto

Juls Points 378

La façon dont j'ai interprété cette question est d'avoir besoin du sous-total de chaque groupe de réponses. Le sous-total s'avère être très facile, en utilisant PARTITION :

SUM(COUNT(0)) OVER (PARTITION BY [Grouping]) AS [MY_TOTAL]

Voici à quoi ressemble mon appel SQL complet :

SELECT MAX(GroupName) [name], MAX(AUX2)[type],  
COUNT(0) [count], SUM(COUNT(0)) OVER(PARTITION BY GroupId) AS [total]
    FROM [MyView]
  WHERE Active=1 AND Type='APP' AND Completed=1
    AND [Date] BETWEEN '01/01/2014' AND GETDATE()
    AND Id = '5b9xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' AND GroupId IS NOT NULL
  GROUP BY AUX2, GroupId

Les données ainsi obtenues ressemblent à ce qui suit :

name    type    count   total
Training Group 2    Cancelation 1   52
Training Group 2    Completed   41  52
Training Group 2    No Show 6   52
Training Group 2    Rescheduled 4   52
Training Group 3    NULL        4   10535
Training Group 3    Cancelation 857 10535
Training Group 3    Completed   7923    10535
Training Group 3    No Show 292 10535
Training Group 3    Rescheduled 1459    10535
Training Group 4    Cancelation 2   27
Training Group 4    Completed   24  27
Training Group 4    Rescheduled 1   27

2voto

Habibillah Points 3586

Vous pouvez utiliser l'union pour joindre des lignes.

select Name, count(*) as Count from yourTable group by Name
union all
select "SUM" as Name, count(*) as Count from yourTable

2voto

sapan Points 21

Pour Sql server, vous pouvez essayer celui-ci.

SELECT ISNULL([NAME],'SUM'),Count([NAME]) AS COUNT
FROM TABLENAME
GROUP BY [NAME] WITH CUBE

1voto

Masum Points 81
  with cttmp
  as
  (
  select Col_Name, count(*) as ctn from tab_name group by Col_Name having count(Col_Name)>1
  )
  select sum(ctn) from c

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X