sql >> Database >  >> RDS >> Sqlserver

Hoe selecteer ik TOP 5 PERCENT van elke groep?

U kunt een CTE (Common Table Expression) gebruiken in combinatie met de NTILE vensterfunctie - dit zal uw gegevens in zoveel segmenten opdelen als u nodig heeft, b.v. in jouw geval in 20 plakjes (elk 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

Dit groepeert uw gegevens in principe op Category,Name , bestellingen door iets anders (niet zeker of COUNT(Name) is echt wat je hier wilt), en verdeelt het vervolgens in 20 stukken, die elk 5% van je gegevenspartitie vertegenwoordigen. Het segment met NTile = 1 is het bovenste 5% segment - negeer dat gewoon bij het selecteren uit de CTE.

Zie:

voor meer info



  1. Kan MySql-query niet converteren met doctrine DQL of QueryBuilder

  2. Ik kan niet meerdere afbeeldingen instellen in rasterweergave?

  3. SQL Error 1630:Functie SUBSTRING bestaat niet.. huh?

  4. MySQL-foutcode:1005