que tienen una tabla de ejemplo de esta manera:¿Cómo selecciono TOP 5 PERCENT de cada grupo?
CREATE TABLE #TEMP(Category VARCHAR(100), Name VARCHAR(100))
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Lisa')
INSERT INTO #TEMP VALUES('A', 'Lisa')
INSERT INTO #TEMP VALUES('A', 'Bucky')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Ross')
INSERT INTO #TEMP VALUES('B', 'Ross')
INSERT INTO #TEMP VALUES('B', 'Ross')
SELECT Category, Name, COUNT(Name) Total
FROM #TEMP
GROUP BY Category, Name
ORDER BY Category, Total DESC
DROP TABLE #TEMP
me da el siguiente:
A John 6
A Adam 4
A Lisa 2
A Bucky 1
B Lily 5
B Tom 4
B Ross 3
Ahora, ¿cómo seleccionar los TOP 5 PERCENT
registros de cada categoría suponiendo que cada categoría tiene más de 100 registros (no se muestra en la tabla de muestra aquí)? Por ejemplo, en mi tabla real, se debe eliminar el registro John
de A
y Lily
registro de B
según el caso (de nuevo, no se presentó la tabla completa aquí) para obtener:
A Adam 4
A Lisa 2
A Bucky 1
B Tom 4
B Ross 3
he estado tratando de use las cláusulas CTE
sy PARTITION BY
pero parece que no puede lograr lo que yo quiero. Quita el TOP 5 PERCENT del resultado general, pero no de cada categoría. ¿Alguna sugerencia?
Puede ayudar de una manera pequeña: si tiene un conteo para un grupo, recuerde que el 5 por ciento sería "row_num <= (5 * count)/100" –
@KierenJohnstone: +1 Gracias. Sé que podría tener que usar CROSS APPLY o algo similar, pero todavía tengo problemas. Se actualizará si lo resuelvo. – Legend
¿Cuál es la salida deseada, por favor? Eliminar el 5 por ciento superior es muy poco comparado con un recuento de 6. Una fila (A, John) es 16%. – gbn