我下表了:
患者
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)
如何解決它?
我下表了:
患者
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)
如何解決它?
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
)
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
試試這個:
SELECT name FROM patients
WHERE diagnosis_id IN
(SELECT TOP(5) diagnosis_id FROM patients
GROUP BY diagnosis_id
ORDER BY COUNT(diagnosis_id))
有兩件事情不對的:
首先,我會recommend using a common table expression爲 「前5」 的查找,而不是一個子查詢 - 到我認爲它更清晰一點,雖然這裏沒有關係,但它在實際工作中可能會表現更好。
雖然主要問題是您要按診斷ID排序前5位查找,而不是計數。您需要改爲ORDER BY COUNT(diagnosis_id)
。