2017-04-24 5 views
0

私のクエリに関する問題があります。代わりに例を使用します。だから、「膿瘍」という病名については、診断されたテーブルで2回診断されていますが、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

テーブル間のリンクのカーディナリティがわかるように、スキーマを教えてください。 'disease.name'は病気の鍵ですか?もしそうなら、なぜ病気の行ごとに1つ以上の 'disease.name'があると思いますか? – AntC

+0

質問には多くの問題があります。 「病気」と「診断された」表のデータのサンプルを最小限にしてください。 @Strawberryの編集を元に戻したのはなぜですか? –

+0

more information guys –

答えて

0

私は問題がクエリであると思います。 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句を使用すると、検索する結果に絞り込まれます。

これが役に立ちます。

関連する問題