Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je sélectionner le TOP 5 POUR CENT de chaque groupe ?

Vous pouvez utiliser un CTE (Common Table Expression) associé au NTILE fonction de fenêtrage - cela découpera vos données en autant de tranches que vous le souhaitez, par ex. dans votre cas, en 20 tranches (chacune de 5%).

;WITH SlicedData AS
(
   SELECT Category, Name, COUNT(Name) Total,
            NTILE(20) OVER(PARTITION BY Category ORDER BY COUNT(Name) DESC) AS  'NTile'
   FROM #TEMP
   GROUP BY Category, Name
)
SELECT *
FROM SlicedData
WHERE NTile > 1

Cela regroupe essentiellement vos données par Category,Name , commandes par autre chose (pas sûr si COUNT(Name) est vraiment ce que vous voulez ici), puis le découpe en 20 morceaux, chacun représentant 5 % de votre partition de données. La tranche avec NTile = 1 est la tranche supérieure de 5 % - ignorez simplement cela lors de la sélection dans le CTE.

Voir :

pour plus d'informations