2017-04-24 52 views
0

我遇到了有關我的查詢的問題。我將使用一個例子。因此,對於名爲'膿腫'的疾病名稱,在我診斷的表格中已經診斷過兩次,但我只能得到1的數目。但是,當我在診斷的表格中使用該疾病檢查它時,我得到2個。請重建我的答案在下面!錯誤的計數數

問題: 列出所有疾病名稱,並計算在診所 診斷每種疾病的次數。該列表是罕見疾病,因此只顯示 診斷計數小於5的疾病。注意:零小於5.提供SQL查詢和結果的數據。

mysql(lookatabscess)

Diagnosedrecord

我的回答:

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); 
+3

如何給我們提供架構,以便我們可以看到跨表的鏈接的基數? 「疾病名稱」是「疾病」的關鍵嗎?如果是這樣的話,爲什麼你會期望在'疾病'中每行有超過1個'disease.name'? – AntC

+0

您的查詢有許多問題。請向我們展示「疾病」和「診斷」表格的最小樣本數據。你爲什麼撤銷@Strawberry編輯? –

+0

增加了更多的信息傢伙 –

回答

0

我認爲這個問題是與您的查詢。正如囚徒暗示的,你應該使用連接而不是在子查詢中使用。

具體來說,我會用一個外連接此查詢,如:

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子句將篩選到您所尋找的結果。

希望這會有所幫助。