J'ai une table comme celle-ci:
c1 | c2
a | 2
b | 1
a | 1
b | 3
a | 2
comment countz-vous pour get des résultats comme celui-ci
col1 | col2 | nombre d'occurrences
a | 1 | 1
a | 2 | 2
b | 3 | 1
- Comment éliminer plusieurs inputs de SQL
- Requête SQL qui trouve des données répétées dans une colonne avec des données différentes dans une deuxième colonne
- Optimisation de la requête rank ()
- Colonne de mise à jour SQL Server avec la valeur d'une autre colonne
- Stocker des files dans la database SQL Server
Et après avoir obtenu la valeur maximale comme ceci:
col1 col2
a | 2
b | 1
Le count 1 est votre ami, le count * conduit à un time de chargement plus long.
SELECT C1, C2, COUNT(1) AS numberofoccurrences FROM TABLE GROUP BY C1, C2
Désolé pour le retard. Pour que Max utilise ce qui suit;
; WITH CTE AS( SELECT c1, c2, COUNT(1) AS NoOfOccurence FROM TEST GROUP BY c1, c2 ), BTE AS( SELECT c1, c2, ROW_NUMBER() OVER(PARTITION BY c1 ORDER BY NoOfOccurence DESC) AS RN FROM CTE )SELECT c1, c2 FROM BTE WHERE RN = 1
Voici une solution complète qui inclut la sortie de valeur maximale finale. Notez également qu'un index sur c1 et c2 améliorera considérablement les performances.
-- Sample data -- including an id for use as a tie-breaker for a unique pk/clustered index on c1 & c2 DECLARE @tbl TABLE (id int identity not null, c1 char(1), c2 tinyint, primary key (c1,c2,id)); INSERT @tbl VALUES ('a', 2), ('b', 1), ('a', 1), ('b', 3), ('a', 2); -- Solution SELECT c1, MaxOccurs = MAX(c) FROM ( SELECT c1, c2, c = COUNT(1) FROM @tbl GROUP BY c1, c2 ) x GROUP BY c1;