SQL Abfrage -> Häufigkeit einer Spalte mit 0 / NULL

OP #2672144
Hallo zusammen,

ich habe folgendes Problem:

Ich habe 2 Tabellen die wie folgt aufgebaut sind:

Tabelle 1: = Personal

ID | Name  |  Vorname
1    Maier    Fritz
2    Müller   Hans
3    Huber    Sebastian
4    Eder     Helmut

Tabelle 2: = Produkt

Produkt | Personal.ID | Qualität
159          1             3
258          1             3
596          2             4
597          2             5
789          4             3

Jetzt möcht ich zählen, wie oft eine Person ein Produkt mit der Qualität 
3 produziert hat. Dafür soll auch eine 0 ausgegeben werden wenn, kein 
Datensatz mit dieser Person vorhanden ist oder eine Person das Produkt 
nicht in der Qualtiät 3 fertigen kann.

Als Ergebnis möchte ich also in diesem Fall das erhalten:
Name | Vorname | Häufigkeit
Maier   Fritz      2
Müller  Hans       0          -> Fertigt nicht in passender Qualität
Huber   Sebastian  0          -> kein Datensatz vorhanden
Eder    Helmut     1

Meine Abfrage sieht bisher so aus:
SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID)
FROM Personal
LEFT OUTER JOIN Produkt ON Personal.ID = Produkt.PersonalID
WHERE Produkt.Qualität = 3 OR Produkt.Qualität IS NULL
GROUP BY Personal.Name, Personal.Vorname
ORDER BY Personal.Name

Somit werden zwar alle vorhandenen Datensätze richtig gezählt, Datesätze 
die nicht vorhanden sind werden auch mit 0 angezeigt, jedoch werden 
Datensätze wo die Qualität != 3 ist nicht mit der 0 ausgegeben sondern 
werden gar nicht berücksichtigt.

Wie muss ich meine Abfrage ändern um das zu realisieren?

Danke für eure Hilfe!
Gast
Wayne Interessierts schrieb:
>
> Somit werden zwar alle vorhandenen Datensätze richtig gezählt, Datesätze
> die nicht vorhanden sind werden auch mit 0 angezeigt, jedoch werden
> Datensätze wo die Qualität != 3 ist nicht mit der 0 ausgegeben sondern
> werden gar nicht berücksichtigt.


ist auch richtig, genau das verlangst du im query ja auch:

> WHERE Produkt.Qualität = 3 OR Produkt.Qualität IS NULL
Persönliche Seite
Wayne Interessierts schrieb:
> Aber ich komm leider nicht drauf, wie ich es ändern könnte, dass es zu
> meinene Anforderungen passt.
Wenn Subquerys unterstützt werden könnte man das z.B. so machen:
1
SELECT Personal.Name, Personal.Vorname, (SELECT count(*) From Produkt where Produkt.PersonalID= Personal.ID AND Produkt.Qualität = 3) as Anzahl
2
FROM Personal
3
GROUP BY Personal.Name, Personal.Vorname
4
ORDER BY Personal.Name
Gast
sollte es nicht ohne das or gehen

SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID)
FROM Personal
LEFT OUTER JOIN Produkt ON Personal.ID = Produkt.PersonalID
WHERE Produkt.Qualität = 3
GROUP BY Personal.Name, Personal.Vorname
ORDER BY Personal.Name
Gast
achne 2.Versuch


SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID)
FROM Personal
LEFT OUTER JOIN Produkt
   ON Personal.ID = Produkt.PersonalID
   and Produkt.Qualität = 3
GROUP BY Personal.Name, Personal.Vorname
ORDER BY Personal.Name
OP
Hallo,
habe gerade mal deinen Vorschlag probiert. Ich erhalte dabei eine 
Fehlermeldung, dass der Verknüfungsausdruck nicht unterstützt wird. Muss 
wohl an dieser Zeile leigen.

Peter II schrieb:

> LEFT OUTER JOIN Produkt
>    ON Personal.ID = Produkt.PersonalID
>    and Produkt.Qualität = 3


Weiterhin funktioniert diese Variante auch nicht:

> SELECT Personal.Name, Personal.Vorname, (SELECT count(*) From Produkt
> where Produkt.PersonalID= Personal.ID AND Produkt.Qualität = 3) as Anzahl
> FROM Personal
> GROUP BY Personal.Name, Personal.Vorname
> ORDER BY Personal.Name

In der SELECT count(*) fehlt ihm einige Verweise.

Ändere ich das ganze so:
(SELECT count(Produkt.PersonalID) FROM Produkt, Personal WHERE 
Produkt.PersonalID = Personal.ID AND Produkt.Qualität = 3 GROUP BY 
Produkt.PersonalID)

Erhalte ich als Ergebnis die Anzahl aller Datensätze und das für jede 
Person.

Langsam bin ich echt am verzweifeln.
Hat jemand noch eine Idee?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.