2009-12-18 32 views
5

mam poniższej tabeli:SQL select top częste zapisy

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 | 
+----+------+-------+ 

chciałbym wybrać 20 najlepszych odrębne nazwy z określonej grupy zamówionej przez najczęstszego nazwy w tej grupie. Wynik dla tego przykładu dla grupy 1 zwróci a b c ( a - 3 wystąpienia, b - 2 wystąpienia i wystąpienie c - 1).

Dziękuję.

Odpowiedz

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

są imiona wynik będzie wyraźna? –

+2

Tak, stąd * GRUPA BY * –

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

Zapewniłoby to dobry widok lub wewnętrzny wybór. Potrzebujesz klauzuli WHERE, aby uzyskać to, o co prosił. –

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

Prawdopodobnie chcesz DESC na Twoim ZAMÓWIENIU. On chce najczęstsze, nie najmniej częste. –

+0

@ Mark Byers Dzięki! –