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

Gruppierung mehrerer Attribute Summierung von Preis

Dieses Thema im Forum "PostgreSQL" wurde erstellt von bennemann8, 9 Juli 2017.

  1. bennemann8

    bennemann8 Benutzer

    Hallo zusamnen,
    folgendes Problem führt bei mir zu Verständnisprobleme, weshalb ich nicht weiterkomme.
    Ich habe 4 Tabellen (Kunde, Bestellung, enthaelt, Getraenk).
    Meine Aufgabe ist es eine View zu erstellen, die mir alle offenen Bestellungen anzeigt - mit Datum/Bestellnummer/KundenID/EMail/Gesamtpreis.
    Hier der sql-Dump: Pastebin
    meine Idee war erstmal sowas wie das hier:
    Code:
    SELECT
        kunde.email,
        enthaelt.bestellnummer,
        enthaelt.kundenid,
        (
        enthaelt.menge * ( SELECT preis FROM getraenk WHERE getraenk.markenname = enthaelt.markenname )) AS Gesamtsumme 
    FROM
        enthaelt
        NATURAL JOIN kunde
        NATURAL JOIN bestellung 
    WHERE
        bestellung.lieferstatus = 'Eingegangen'
    
    jetzt müsste ich das ganze noch gruppieren nach bestellnummer und kundenid, was allerdings zu einem Fehler führt. Ich soll die Attribute in eine Aggregatfunktion verwenden. Dann hab ich es nochmal mit nem Join probiert, aber da komm ich auch nicht mit weiter...
    Code:
    SELECT
        datum,
        kundenid,
        A.bestellnummer,
        email,
        summe 
    FROM
        ( kunde NATURAL INNER JOIN bestellung WHERE lieferstatus = 'Eingegangen' AS B )
        AS A NATURAL INNER JOIN ( SELECT kundenid, bestellnummer, SUM ( preis * menge ) AS summe FROM enthaelt NATURAL INNER JOIN getraenk ) AS C 
    GROUP BY
        ( datum, kundenid, bestellnummer, email ) 
    ORDER BY
        summe DESC 
    
    Mit dem sql-Dump sollte am Ende bswp. für die Bestellung 0, vom Kunden 7 der Datensatz
    Code:
    datum|kunde|bestellung|email|Gesamtpreis
    31.12.16|7|0|www@wald.de|11.3
    herauskommen

    Danke schonmal für eure Hilfe..
    Gruß
    Jakob
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# SELECT
      bestellung.datum,
      kunde.email,
      enthaelt.bestellnummer,
      enthaelt.kundenid,
      sum(
      enthaelt.menge * ( SELECT preis FROM getraenk WHERE getraenk.markenname = enthaelt.markenname )) AS Gesamtsumme
    FROM
      enthaelt
      NATURAL JOIN kunde
      NATURAL JOIN bestellung
    WHERE
      bestellung.lieferstatus = 'Eingegangen'
    GROUP BY
      bestellung.datum,
      kunde.email,
      enthaelt.bestellnummer,
      enthaelt.kundenid;
      datum  |  email  | bestellnummer | kundenid | gesamtsumme
    ------------+-------------------------------------+---------------+----------+-------------
     2016-12-31 | www@wald.de  |  0 |  7 |  11.30
     2017-05-29 | geschaeftsfuehrung@steinundatom.com |  1 |  1 |  4.80
     2017-05-05 | soerenzwing@wwu.de  |  0 |  27 |  55.20
     2017-06-16 | soerenzwing@wwu.de  |  1 |  27 |  19.20
    (4 Zeilen)
    
    test=*#
    
    
    So vielleicht?
     
    bennemann8 gefällt das.
  3. bennemann8

    bennemann8 Benutzer

    ja ziemlich genau so..
    gibts da vielleicht einen Trick oder so, wie man "schneller erkennt" wie/wo/was man joinen muss?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    an den joins habe ich gar nix gemacht, das habe ich komplett von Dir übernommen. Gilt das auch als Trick?
     
  5. bennemann8

    bennemann8 Benutzer

    deine Query sieht einfach übersichtlicher aus..
     
    akretschmer gefällt das.
  6. Dukel

    Dukel Datenbank-Guru

    Ich würde den "Trick" Erfahrung nennen.
     
    akretschmer gefällt das.
Die Seite wird geladen...
Ähnliche Themen - Gruppierung mehrerer Attribute
  1. nixfix
    Antworten:
    10
    Aufrufe:
    763
  2. IchHH
    Antworten:
    9
    Aufrufe:
    971
  3. chzhtg
    Antworten:
    0
    Aufrufe:
    1.165
  4. g.kieninger
    Antworten:
    5
    Aufrufe:
    1.206
  5. Rainer50
    Antworten:
    1
    Aufrufe:
    627

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