SQL count() Abfrage für Produkt Artikel

würstl

Benutzer
Beiträge
7
Wie formuliere ich eine Abfrage, bei welcher die Anzahl verschiedener Kunden ausgebe, welche einen Artikel "XY" bestellt haben?

Ich habe das DB Schema

Bestellung = {BestellNummer, Datum, KundenID}
Bestellinfo = {BestellNummer, ArtikelNummer, Anzahl}
Kunde = {KundenID, Strasse, Ort, Email}
Artikel = {ArtikelNummer, Artikelname, Kategorie}

Mit freundlichen Grüßen
 
Werbung:
Ja, inner Join. Ich bin aber noch Anfänger. Ich hatte die Idee die Tabellen Kunde, Artikel und Bestellung zu joinen. Weiter weiß ist nicht.
 
ja, du joinst die nötigen Tabellen. Im select-Teil nennst Du alle Spalten, die Du brauchst. Beachte, daß nicht-aggregierte Spalten im select-teil dann im group by - teil sein müssen. voila!
 
also soweit hätte ich gedacht:
SELECT count(KundenID)
FROM Kunde JOIN Bestellinfo JOIN Bestellung JOIN Artikel
WHERE Artikelname = "XY"

Bestimmt ist das nicht ganz richtig..

(Blutiger Anfänger, habet Erbamen)
 
also soweit hätte ich gedacht:
SELECT count(KundenID)
FROM Kunde JOIN Bestellinfo JOIN Bestellung JOIN Artikel
WHERE Artikelname = "XY"

Bestimmt ist das nicht ganz richtig..

(Blutiger Anfänger, habet Erbamen)
in etwa so:

Code:
select count(kundenid)
from kunde
join bestellinfo on (bestellinfo.kundenid = kunde.kundenid)
join bestellung on (kunde.kundenid = bestellung.kundenid)
join artikel on (kunde.kundenid = artikel.kundenid)
where artikelname = "XY";

Also nach dem Join mit Tabelle x immer die Bedingung schreiben, welche erfüllt werden soll...

Das ist dein erstes Problem, und ich bin am überlegen, ob er dann alle kundenids zählt, oder ob man da mit union arbeiten muss...
 
Vielen Dank! Kommentar zu Zeile 3: Bestellinfo hat kein Attribut "KundenID". Müsste das insgesamt nicht so aussehen dann alles:

SELECT count(kundenid)
FROM kunde
JOIN bestellung ON (kunde.kundenid = bestellung.kundenid)
JOIN bestellinfo ON (bestellinfo.bestellNummer = bestellung.bestellNummer)
JOIN artikel ON (bestellinfo.ArtikelNummer = artikel.ArtikelNummer)
WHERE artikelname = "XY";

?
 
so in etwa, probiere es aus. Falls ein Kunde das 42 mal bestellt, soll das dann 42 mal gelten oder nur 1 mal, für diesen Kunden? Da kann man noch viel rumspielen ...
 
Wenn ich zb auf die Zeile gucke
JOIN artikel ON (bestellinfo.ArtikelNummer = artikel.ArtikelNummer)
Werden dann in der "neuen" "gejointen" Tabelle auch die anderen Attribute von "Artikel" sein? Das wäre ja das Ziel, ich will ja auch auf "ArtikelName" zugreifen.

Nur 1 mal pro Kunde.

Kennst du eine Website wo man SQL Queries testen kann, ohne dass ich ne ganze DB aufsetzen muss?
 
Werbung:
Wenn ich zb auf die Zeile gucke
JOIN artikel ON (bestellinfo.ArtikelNummer = artikel.ArtikelNummer)
Werden dann in der "neuen" "gejointen" Tabelle auch die anderen Attribute von "Artikel" sein? Das wäre ja das Ziel, ich will ja auch auf "ArtikelName" zugreifen.

Nur 1 mal pro Kunde.

Kennst du eine Website wo man SQL Queries testen kann, ohne dass ich ne ganze DB aufsetzen muss?

Es tauchen die Attribute auf, die Du im SELECT-Teil angiebst. Beachte aber: bei Aggregation alle Spalten im Result aggregiert oder gruppiert! Es gibt minderwertige Datenbanken, die das nicht wissen und statt einer Fehlermeldung ein Zufallsergebniss anzeigen. Schon blöd, oder?

DB testen? es gibt PostgreSQL, welches Du unter Linux, Windows, bla fasel innerhalb Minuten installieren kannst. PG kostet auch nix.
 
Zurück
Oben