sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo selecciono el 5 POR CIENTO SUPERIOR de cada grupo?

Podría usar una CTE (expresión de tabla común) emparejada con NTILE función de ventana:esto dividirá sus datos en tantos segmentos como necesite, p. en tu caso, en 20 lonchas (cada una al 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

Esto básicamente agrupa sus datos por Category,Name , pedidos por otra cosa (no estoy seguro si COUNT(Name) es realmente lo que desea aquí), y luego lo divide en 20 partes, cada una de las cuales representa el 5% de su partición de datos. El segmento con NTile = 1 es el 5 % superior; simplemente ignóralo cuando selecciones del CTE.

Ver:

para más información