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 ?

1voto

Yitzchok Glancz Points 984

Vous pouvez utiliser ROLLUP

select nvl(name, 'SUM'), count(*)
from table
group by rollup(name)

0voto

Htaras Points 823

Vous pouvez essayer de faire un groupe par nom et de compter les identifiants dans ce groupe.

SELECT name, count(id) as COUNT FROM table group by name

0voto

Usman Points 1861

L'utiliser comme

select Name, count(Name) as Count from YourTable
group by Name
union 
Select 'SUM' , COUNT(Name) from YourTable

0voto

JohnCanessa Points 41

J'utilise le serveur SQL et la procédure suivante devrait fonctionner pour vous :

select cast(name as varchar(16)) as 'Name', count(name) as 'Count' à partir de Table1 group by Name [ ] select 'Somme:', count(nom) de Table1

0voto

theBuzzyCoder Points 1086

J'ai exigé having count(*) > 1 également. J'ai donc rédigé ma propre requête en me référant à certaines des requêtes susmentionnées.

SYNTAX :

select sum(count) from (select count(`table_name`.`id`) as `count` from `table_name` where {some condition} group by {some_column} having count(`table_name`.`id`) > 1) as `tmp`;

Exemple :

select sum(count) from (select count(`table_name`.`id`) as `count` from `table_name` where `table_name`.`name` IS NOT NULL and `table_name`.`name` != '' group by `table_name`.`name` having count(`table_name`.`id`) > 1) as `tmp`;

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