2009-12-18 28 views
5

aşağıdaki tablo vardır: Ben o gruptaki en sık adıyla sipariş belirli bir gruba gelen en iyi 20 ayrı adlar seçmek istiyorumSQL Select üst sık kayıtlar

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

. Bu örnekte grup 1 için sonuç a b c ( a - 3 oluşumu, b - 2 oluşumu ve c - 1 oluşumu) olacaktır.

Teşekkür ederiz.

cevap

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

ayrı olacak sonuç isimler? –

+2

Evet, dolayısıyla * GROUP BY * –

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

Bu, iyi bir görünüm veya iç seçim yapar. Gerçi istediğini almak için bir WHERE maddesine ihtiyacın var. –

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

Muhtemelen ORDER BY'nizde bir DESC istersiniz. En sık sık, en sık değil istiyor. –

+0

@Mark Byers Thanks! –