我下表了:
患者
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)
。