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?
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
SELECT name, COUNT(name) AS count, SUM(COUNT(name)) OVER() AS total_count
FROM Table GROUP BY name
Sans spécifier quel rdbms vous utilisez
Regardez cette démo
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
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
Essaye ça:
SELECT ISNULL(Name,'SUM'), count(*) as Count
FROM table_name
Group By Name
WITH ROLLUP
Veuillez exécuter comme ci-dessous:
Select sum(count)
from (select Name,
count(Name) as Count
from YourTable
group by Name); -- 6
Pour le serveur SQL, vous pouvez essayer celui-ci.
SELECT ISNULL([NAME],'SUM'),Count([NAME]) AS COUNT
FROM TABLENAME
GROUP BY [NAME] WITH CUBE
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
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
Vous pouvez utiliser ROLLUP
select nvl(name, 'SUM'), count(*)
from table
group by rollup(name)
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
Utilisez-le comme
select Name, count(Name) as Count from YourTable
group by Name
union
Select 'SUM' , COUNT(Name) from YourTable
Après la requête, exécutez la procédure ci-dessous pour obtenir le nombre total de lignes.
select @@ROWCOUNT
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