2009-12-18 52 views
5

Tôi có bảng sau:SQL Select top hồ sơ thường xuyên

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

Tôi muốn chọn top 20 tên phân biệt với một nhóm cụ thể ra lệnh bằng tên thường gặp nhất trong nhóm đó. Kết quả cho ví dụ này cho nhóm 1 sẽ trả về a b c ( a - 3 lần xuất hiện, b - 2 lần xuất hiện và c - 1 lần xuất hiện).

Cảm ơn bạn.

Trả lời

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

là tên kết quả sẽ được khác biệt? –

+2

Có, do đó * GROUP BY * –

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

Điều này sẽ làm cho một cái nhìn tốt hoặc lựa chọn bên trong. Bạn cần một mệnh đề WHERE để có được những gì anh ta yêu cầu. –

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

Bạn có thể muốn có một DESC trên ORDER BY của bạn. Anh ấy muốn thường xuyên nhất, không phải là ít nhất là thường xuyên. –

+0

@Mark Byers Cảm ơn! –

Các vấn đề liên quan