2017-04-24 3 views
0

Ich habe ein Problem bezüglich meiner Anfrage. Ich werde stattdessen ein Beispiel verwenden. Also, für den Namen der Krankheit namens "Abszess", wurde dies zweimal in meiner diagnostizierten Tabelle diagnostiziert, aber ich bekomme nur eine Zählung von 1. Wenn ich jedoch durch die Krankheitid in meiner diagnostizierten Tabelle überprüfen, bekomme ich 2. Bitte rekonstruieren meine Antwort unten!Falsche Anzahl der Zähler

Frage: Liste alle Krankheitsnamen und eine Zählung, wie oft jede Krankheit bei der Klinik diagnostiziert wurde. Die Liste ist von selten erkannten Krankheiten, so zeigen Sie nur Krankheiten, die eine Diagnose-Anzahl von weniger als 5 haben. Hinweis: Zero ist kleiner als 5. Stellen Sie die SQL-Abfrage und ein Daten VISUALISIERUNG der Ergebnisse.

mysql(lookatabscess)

Diagnosedrecord

Meine Antwort:

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

Wie wäre es, wenn Sie uns das Schema geben, damit wir die Kardinalität Ihrer Tabellenverknüpfung sehen können? Ist 'Krankheit.Name' ein Schlüssel zur Krankheit? Wenn ja, warum würden Sie mehr als 1 'Krankheit.Name' pro Zeile in' Krankheit' erwarten? – AntC

+0

Ihre Abfrage hat eine Reihe von Problemen. Bitte zeigen Sie uns eine minimale Stichprobe von Daten für die "Krankheit" und "diagnostizierten" Tabellen. Warum hast du die @Strawberry-Bearbeitung rückgängig gemacht? –

+0

hinzugefügt weitere Informationen Jungs –

Antwort

0

denke ich, das Problem mit Ihrer Anfrage ist. Wie Prisoner andeutete, sollten Sie einen Join verwenden, anstatt ihn in Unterabfragen zu verwenden.

Insbesondere würde ich ein Outer für diese Abfrage Join verwenden wie:

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 

Die äußere Verknüpfung können Sie jede einzelne Zeile für Krankheit bekommen, und passende Zeilen (soweit vorhanden) von der Diagnose-Tabelle. Dann wird die Verwendung der GROUP BY & HAVING-Klauseln auf die von Ihnen gesuchten Ergebnisse herunterfiltern.

Hoffe, das hilft.

Verwandte Themen