1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Problem bei einfacher Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von automatikzx, 12 Dezember 2017.

  1. automatikzx

    automatikzx Benutzer

    Moin Moin.

    Ich möchte gerne eine Abfrage erstellen, die Alle Kunden anzeigt, die mindestens 5 Artikel gekauft haben.
    Meine Tabellen sieht so aus:

    Kunde: KundeID, Name

    Auftrag: AuftragID, Kaufdatum, Anzahl

    Kunde_Auftrag: FK_KundeID, FK_AuftragID

    Ich möchte gerne den Namen und die Anzahl ausgeben. Wäre nett wenn mir da einer die Lösung sagen kann.

    Danke. :)
     
  2. Chuky666

    Chuky666 Datenbank-Guru

    Moin moin,

    ich glaube dir einfach die Lösung zu präsentieren würde dich nicht weiterbringen. Hilfestellung wird dir, denke ich, gerne gegeben. :)
    Am besten du zeigst mal was du bisher hast und woran du momentan scheiterst.

    Viele Grüße
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Na, ich will mal nicht so sein heute ...

    Code:
    test=*# create table kunde (id int primary key, name text);
    CREATE TABLE
    test=*# create table auftrag(id int primary key, datum date, anzahl int);
    CREATE TABLE
    test=*# create table kunde_auftrag(kunde int references kunde, auftrag int references auftrag);
    CREATE TABLE
    test=*# insert into kunde select s, 'Kunde'||s::int from generate_series(1,5) s;
    INSERT 0 5
    test=*# insert into auftrag(id, anzahl) select s, random()*100 from generate_series(1, 100) s;
    INSERT 0 100
    test=*# insert into kunde_auftrag select (1 + (random()*4)::int), 1+(random()*99)::int from generate_series(1, 200) s;
    INSERT 0 200
    test=*# select kunde, count(1) from kunde_auftrag group by kunde having count(1) >= 50 ;
     kunde | count
    -------+-------
      4 |  54
      3 |  60
    (2 Zeilen)
    
    Via JOIN da noch den Kundennamen zu ermitteln überlasse ich Dir nun aber zur Übung.
     
    Chuky666 gefällt das.
  4. automatikzx

    automatikzx Benutzer

    Moin nochmal. Ich habe vergessen zu erwähnen, dass ich in LibreOffice Base arbeite. Habe eigentlich nichts mit Datenbanken nichts zu tun und brauche sie nur einmalig.
    Hab's erst mit: SELECT Kunde.Name, Auftrag.Anzahl FROM Kunde, Auftrag WHERE Anzahl >= 5
    versucht, aber das scheint leider nicht zu klappen.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Ja, das ist nicht verwunderlich.
     
  6. automatikzx

    automatikzx Benutzer

    Habt Ihr vielleicht eine Idee, wie ich es umsetzen könnte? ._.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Ja. Soll ich Dir #3 vorlesen?
     
  8. automatikzx

    automatikzx Benutzer

    Leider bekomme ich diese Fehlermeldung
     

    Anhänge:

  9. akretschmer

    akretschmer Datenbank-Guru

    Nun ja, die Anpassung der Spaltennamen von meinem Beispiel an Deine realen Tabellen überlasse ich Dir ebenfalls zur Übung.

    Hätte ich ein DROP geposted, hättest Du das auch so ausgeführt, oder?
     
  10. automatikzx

    automatikzx Benutzer

    Ok, das mit der 50 hab ich übersehen :D Aber auch nach der Änderung, kommt die Fehlermeldung
     
  11. automatikzx

    automatikzx Benutzer

    Meine Tabellen und Beziehungen sehen so aus.
     

    Anhänge:

  12. Chuky666

    Chuky666 Datenbank-Guru

    Wenn akretschmer schon so nett war will ich das auch mal sein..

    Wie wäre es hiermit als anstoß:

    "
    SELECT *
    FROM Kunde_Auftrag ka
    INNER JOIN kunde k
    ON ka.fk_kunden_id = k.kundenid
    INNER JOIN Auftrag a
    ON a.auftragid = ka.fk_auftragid
    WHERE a.Anzahl > 4
    "
    Den Rest dürftest du schaffen...
     
    akretschmer gefällt das.
  13. automatikzx

    automatikzx Benutzer

    Dankeschön, hat geklappt! :)

    Jetzt noch eine letzte Aufgabe, die ich lösen müsste. Die ist ein bisschen komplizierter.
    Es kommt eine 3. Tabelle hinzu, die "Laden" heißt mit den Spalten "LadenID" & "LadenName". Und der Tabelle Kunde wird die Spalte "Alter" hinzugefügt

    Und zwar soll ich für jeden Laden das durchschnittliche Alter der Kunden, die über diesen mindestens zwei Artikel gekauft haben ausgegeben werden.

    Ich bin mir jetzt nicht so ganz sicher, wie ich die Tabellen jetzt verknüpfen soll. Würde es gehen, wenn ich nur "Laden" und "Auftrag" miteinander verknüpfe? Weil ich Auftrag und Kunde ja bereits in Beziehung stehen.

    Und wie sieht dann die Abfrage aus? Ich weiß, dass ich auf jeden all mit
    SELECT LadenName, AVG(Alter)
    FROM ...
    anfangen müsste.
     
  14. Chuky666

    Chuky666 Datenbank-Guru

    mal so aus der Hüfte geschossen(und auch nur schemenhaft, damit man dir frecher weise nicht das nachdenken abnimmt ;) ): Kunde kauft (Auftrag) etwas in dem Laden "xyz"... demzufolge müsste der Kunde mit dem Auftrag, der Auftrag mit dem Laden usw verknüppelt werden ;)

    Bau doch mal was und stell es hier der Masse zur Verfügung :)
     
  15. Chuky666

    Chuky666 Datenbank-Guru

    ähm.. mal so eine Frage am Rande... was und wofür genau treibst du da eigentlich? Sind das Hausaufgaben oder langeweile/hobby oder beziehst du dafür geld? :D
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden