Tsql SQL top+count()混淆

Tsql SQL top+count()混淆,tsql,Tsql,我有下表: 患者 身份证件 名称 诊断号 我需要做的是让所有的病人得到最流行的诊断。 使用这个查询,我什么也得不到: 从患者中选择姓名 你的身份证在哪里 从患者中选择前5位COUNTdiagnosis\u id 按诊断id分组 按诊断号订购 如何修复它?试试这个: select p.name from patients p inner join ( select top 5 diagnosis_id, count(*) as diagnosis_count from patien

我有下表: 患者 身份证件 名称 诊断号

我需要做的是让所有的病人得到最流行的诊断。 使用这个查询,我什么也得不到: 从患者中选择姓名 你的身份证在哪里 从患者中选择前5位COUNTdiagnosis\u id 按诊断id分组 按诊断号订购 如何修复它?

试试这个:

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))
试试这个:

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

这有两个问题:

首先,我更倾向于前5名的查找,而不是子查询——对我来说,这会让它更清晰一些,尽管这在这里并不重要,但在实际工作中它可能会表现得更好


但主要的问题是,您是根据诊断id而不是计数来排序前5名查找。您需要改为按计数顺序进行诊断。

这有几个问题:

首先,我更倾向于前5名的查找,而不是子查询——对我来说,这会让它更清晰一些,尽管这在这里并不重要,但在实际工作中它可能会表现得更好

但主要的问题是,您是根据诊断id而不是计数来排序前5名查找。您将需要改为按编号排序