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 ?

93voto

Vishal Suthar Points 7442
SELECT name, COUNT(name) AS count
FROM table
GROUP BY name

UNION ALL

SELECT 'SUM' name, COUNT(name)
FROM table

SORTIE :

name                                               count
-------------------------------------------------- -----------
alpha                                              1
beta                                               3
Charlie                                            2
SUM                                                6

82voto

Yitzchok Glancz Points 984
SELECT name, COUNT(name) AS count, SUM(COUNT(name)) OVER() AS total_count
FROM Table GROUP BY name

17voto

astander Points 83138

Sans préciser quel rdbms vous utilisez

Jetez un coup d'œil à cette démo

Démonstration de SQL Fiddle

SELECT Name, COUNT(1) as Cnt
FROM Table1
GROUP BY Name
UNION ALL
SELECT 'SUM' Name, COUNT(1)
FROM Table1

Cela dit, je recommanderais que le total soit ajouté par votre couche de présentation, et non par la base de données.

Il s'agit plutôt d'une version de SQL SERVER qui utilise Récapitulation des données à l'aide de ROLLUP

Démonstration de SQL Fiddle

SELECT CASE WHEN (GROUPING(NAME) = 1) THEN 'SUM'
            ELSE ISNULL(NAME, 'UNKNOWN')
       END Name, 
      COUNT(1) as Cnt
FROM Table1
GROUP BY NAME
WITH ROLLUP

10voto

Koy Bun Points 151

Essayez ceci :

SELECT  ISNULL(Name,'SUM'), count(*) as Count
FROM table_name
Group By Name
WITH ROLLUP

5voto

Itay wazana Points 160

Toutes les solutions proposées ici sont excellentes mais ne sont pas nécessairement applicables aux anciens serveurs mysql (du moins dans mon cas). Vous pouvez donc utiliser des sous-requêtes (je pense que c'est moins compliqué).

 select sum(t1.cnt) from 
        (SELECT column, COUNT(column) as cnt
            FROM
            table 
            GROUP BY 
            column
            HAVING 
            COUNT(column) > 1) as t1 ;

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