2010-03-29 108 views
0

我下表了:
患者
ID

diagnosis_idSQL頂部+計數()混淆

,我需要做的是讓所有的患者N個最流行診斷。
而我沒有得到任何使用此查詢:
SELECT name FROM patients
WHERE diagnosis_id IN
(SELECT TOP(5) COUNT(diagnosis_id) FROM patients
GROUP BY diagnosis_id
ORDER BY diagnosis_id)

如何解決它?

回答

3
SELECT name FROM patients 
WHERE diagnosis_id IN 
(
SELECT TOP(5) diagnosis_id FROM patients 
GROUP BY diagnosis_id 
ORDER BY COUNT(diagnosis_id) desc 
) 
0
select p.name from patients p 
inner join (
    select top 5 diagnosis_id, count(*) as diagnosis_count 
    from patients 
    group by diagnosis_id 
    order by diagnosis_count) t on t.diagnosis_id = p.diagnosis_id 
0

試試這個:

SELECT name FROM patients 
WHERE diagnosis_id IN 
(SELECT TOP(5) diagnosis_id FROM patients 
GROUP BY diagnosis_id 
ORDER BY COUNT(diagnosis_id)) 
1

有兩件事情不對的:

首先,我會recommend using a common table expression爲 「前5」 的查找,而不是一個子查詢 - 到我認爲它更清晰一點,雖然這裏沒有關係,但它在實際工作中可能會表現更好。

雖然主要問題是您要按診斷ID排序前5位查找,而不是計數。您需要改爲ORDER BY COUNT(diagnosis_id)