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

Durch AS definierten Wert in Where-Bedingung implementieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Mariusspr, 25 Juni 2015.

  1. Mariusspr

    Mariusspr Neuer Benutzer

    Hallo, ich möchte eine Abfrage mit folgender Aufgabenstellung durchführen:

    "Geben Sie eine absteigend sortierte Liste von Kunden und deren Gesamtbestellwert aus, die bereits insgesamt Ware im Wert von über 10.000 EUR bestellt haben!“

    Mein Code wäre bisher
    Code:
    Select k.firma, Sum(bd.Einzelpreis*bd.anzahl) As Gesamtbestellwert
    From Kunden k,bestelldetails bd,bestellungen b
    Where  Gesamtbestellwert > 10000 AND k.kundencode=b.kundencode and bd.BestellNr=b.BestellNr
    Group by k.kundencode
    
    Leider scheitert es an der Where Bedingung Gesamtbestellwert > 10000, da Unknown column Gesamtbestellwert. Wie kann ich diesen Gesamtbestellwert in meine Where-Bedingung mit einbauen?

    Vielen Dank im Voraus,

    Marius
     
  2. akretschmer

    akretschmer Datenbank-Guru

    das geht nicht.

    Code:
    test=*# select 1 as r;
     r
    ---
     1
    (1 row)
    
    test=*# select 1 as r where r = 1;
    ERROR:  column "r" does not exist
    LINE 1: select 1 as r where r = 1;
      ^
    test=*# select * from (select 1 as r) foo where r=1;
     r
    ---
     1
    (1 row)
    

    Das Where filtert vor Ausführung dessen, was im Select steht. Zu diesem Zeitpunkt ist das nicht definiert. Punkt.
     
  3. Mariusspr

    Mariusspr Neuer Benutzer

    Das heißt ich setze nach
    Code:
    Group By k.KundenCode
    Having Gesamtbestellwert>10000
    ?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Having kann man bei Aggregationen verwenden, dein select ist aber auch so für den Eimer, weil Du Spalten im Resultat hast, die weder aggregiert noch gruppiert werden. MySQL ist in den derzeitigen Beta-Versionen noch nicht in der Lage, das zu erkennen, daß wird erst, sobald es nächstes Jahr oder so endlich mal eine richtige stable Release von MySQL gibt ;-) , bis dahin liefert die MySQL ein zufälliges Ergebnis. Nicht schön, aber immerhin etwas ;-)
     
  5. ukulele

    ukulele Datenbank-Guru

    Aber HAVING sum(bd.einzelpreis*bd.anzahl) > 10000 müsste doch gehen, abgesehen von der fehlerhaften GROUP BY Klausel.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Bei Having kann er den Alias nutzen, da ist das ja berechnet. Having filtert die Ergebnisszeilen, Where die Ausgangsmenge.
     
  7. NeoPrince

    NeoPrince Aktiver Benutzer

    bischen quer gedacht ... probier es mal damit
    ich bin mir aber nicht sicher in wie performat das ist. Das sind ja quasi 2 selects in einem.
    Code:
    select * from (
    
    Select k.firma, Sum(bd.Einzelpreis*bd.anzahl) As Gesamtbestellwert
    From Kunden k,bestelldetails bd,bestellungen b
    Where k.kundencode=b.kundencode and bd.BestellNr=b.BestellNr
    Group by k.kundencode
    
    ) as a where a.Gesamtbestellwert > 10000
     
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