2010-03-29 128 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)