sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu vybrat TOP 5 PROCENT z každé skupiny?

Můžete použít CTE (Common Table Expression) spárovaný s NTILE funkce okna – tato rozdělí vaše data na tolik řezů, kolik potřebujete, např. ve vašem případě na 20 plátků (každý po 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

To v podstatě seskupuje vaše data podle Category,Name , objednává podle něčeho jiného (nejsem si jistý, zda COUNT(Name) je opravdu to, co zde chcete), a poté jej rozřeže na 20 kusů, z nichž každý představuje 5 % vašeho datového oddílu. Řez s NTile = 1 je horních 5 % - to při výběru z CTE ignorujte.

Viz:

pro více informací



  1. Rozdíl mezi vícepříkazovými tabulkovými funkcemi a vloženými tabulkovými funkcemi na serveru SQL Server

  2. Pokus o naplnění rozevírací nabídky v codeigniter daty mysql

  3. Generování jedinečných kódů v PHP/MySQL?

  4. Jak monitorovat PostgreSQL běžící uvnitř kontejneru Docker:Část první