我有一个关于我的查询的问题。我将使用一个示例来代替。因此,对于名为“脓肿”的疾病名称,在我的诊断表中已经诊断了两次,但我只得到了1。然而,当我使用我的诊断表中的疾病it检查它时,我得到了2。请重建我的答案!
问题:列出所有疾病的名称,并计算每种疾病在诊所被诊断的次数。该列表列出了很少识别的疾病,因此仅显示诊断计数小于5的疾病。注意:0小于5。提供SQL查询和结果的数据可视化。
我的答案是:
SELECT disease.name, COUNT(*) AS number_of_disease_diagnosed
FROM disease
WHERE diseaseid IN (SELECT DISTINCT diseaseid FROM diagnosed)
GROUP BY disease.name
HAVING COUNT(*) <= 5
UNION
SELECT diseaseid,0
FROM disease
WHERE diseaseid NOT IN (SELECT DISTINCT diseaseid FROM diagnosed);
发布于 2017-04-24 11:26:19
我认为问题出在您的查询上。正如Prisoner所暗示的,您应该使用连接而不是在子查询中使用。
具体地说,我将对此查询使用外部联接,例如:
select disease.name, count(diagnosed.diagnosedid) as Count
from
disease
left outer join diagnosed on disease.diseaseID = diagnosed.diseaseID
group by
disease.Name
having
count(diagnosed.diagnosedid) <= 5
外连接将获取疾病的每一行,以及来自诊断表的匹配行(如果存在)。然后,GROUP BY & HAVING子句的使用将过滤出您所寻求的结果。
希望这能有所帮助。
https://stackoverflow.com/questions/43578268
复制相似问题