2009-12-18 17 views
5

tengo la siguiente tabla:SQL SELECT TOP registros frecuentes

Table 
+----+------+-------+ 
| ID | Name | Group | 
+----+------+-------+ 
| 0 | a | 1 | 
| 1 | a | 1 | 
| 2 | a | 2 | 
| 3 | a | 1 | 
| 4 | b | 1 | 
| 5 | b | 2 | 
| 6 | b | 1 | 
| 7 | c | 2 | 
| 8 | c | 2 | 
| 9 | c | 1 | 
+----+------+-------+ 

me gustaría para seleccionar los 20 nombres distintos de un grupo específico ordenado por el nombre más frecuente en ese grupo. El resultado para este ejemplo para el grupo 1 devolvería a b c ( a - 3 ocurrencias, b - 2 ocurrencias y c - 1 ocurrencia).

Gracias.

Respuesta

13
SELECT TOP(20) [Name], Count(*) FROM Table 
WHERE [Group] = 1 
GROUP BY [Name] 
ORDER BY Count(*) DESC 
+0

son los nombres de resultado va a ser distinto? –

+2

Sí, de ahí el * GROUP BY * –

2
SELECT 
    TOP 20 
    Name, 
    Group, 
    COUNT(1) Count, 
FROM 
    MyTable 
GROUP BY 
    Name, 
    Group 
ORDER BY 
    Count DESC 
+0

Esto haría una buena vista o selección interna. Sin embargo, necesita una cláusula WHERE para obtener lo que está pidiendo. –

4
SELECT Top(20) 
    name, group, count(*) as occurences 
FROM yourtable 
GROUP BY name, group 
ORDER BY count(*) desc 
+0

Probablemente desee un DESC en su ORDER BY. Él quiere el más frecuente, no el menos frecuente. –

+0

@Mark Byers ¡Gracias! –