web-dev-qa-db-fra.com

SOMME du COUNT groupé dans une requête SQL

J'ai une table avec 2 champs:

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

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

 Nom Count 
------- -----
 Alpha 1 
 Beta 3 
 Charlie 2 
SOMME 6

Comment pourrais-je écrire une requête pour ajouter la ligne SUM sous la table?

49
nametal
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
54
Vishal Suthar
SELECT name, COUNT(name) AS count, SUM(COUNT(name)) OVER() AS total_count
FROM Table GROUP BY name
41
Yitzchok Glancz

Sans spécifier quel rdbms vous utilisez 

Regardez cette démo

SQL Fiddle DEMO

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.

Ceci est un peu plus d’une version SQL SERVER utilisant Résumer des données avec ROLLUP

SQL Fiddle DEMO

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
10
Adriaan Stander

Essaye ça:

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

Veuillez exécuter comme ci-dessous:

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

Pour le serveur SQL, vous pouvez essayer celui-ci.

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

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
2
Habibillah
  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
1
Masum

Vous pouvez utiliser ROLLUP 

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

Vous pouvez essayer de grouper par nom et compter les identifiants de ce groupe. 

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

Utilisez-le comme 

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

Après la requête, exécutez la procédure ci-dessous pour obtenir le nombre total de lignes.

select @@ROWCOUNT
0
Chitta

J'utilise SQL Server et ce qui suit devrait fonctionner pour vous:

sélectionnez cast (nom comme varchar (16)) comme "nom", compte (nom) comme "compte" de Table1 groupe par Nom syndicat tous sélectionnez 'Somme:', comptez (nom) de Table1

0
user5948557