sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan vælger jeg TOP 5 PROCENT fra hver gruppe?

Du kan bruge en CTE (Common Table Expression) parret med NTILE vinduesfunktion - dette vil dele dine data op i lige så mange skiver som du har brug for, f.eks. i dit tilfælde i 20 skiver (hver 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

Dette grupperer grundlæggende dine data efter Category,Name , bestiller efter noget andet (ikke sikker på om COUNT(Name) er virkelig den ting, du vil have her), og skærer den derefter op i 20 stykker, der hver repræsenterer 5 % af din datapartition. Udsnittet med NTile = 1 er den øverste 5% skive - bare ignorer det, når du vælger fra CTE.

Se:

for mere info



  1. MySQL indsæt række på dublet nøgle opdatering flere kolonner

  2. Find lignende billeder i (ren) PHP / MySQL

  3. Deaktiver PostgreSQL-fremmednøgletjek for migreringer

  4. Forenkling af enhedstest Hovedlagret procedure, som også kalder en hjælpeprocedure