Summenspalten in mysql verwenden dann das Ergebnis in where-Klausel

8

Ich möchte das tun können:

%Vor%

Aber ich bekomme eine unbekannte Spalte mit "sumTotal".

Ist das möglich?

    
MichelReap 25.03.2013, 15:36
quelle

4 Antworten

16

Verwenden Sie HAVING :

%Vor%

Das Problem ist, dass die WHERE -Klausel vor der SELECT -Anweisung ausgeführt wird. Daher ist die Spalte sumTotal noch nicht verfügbar.

Die HAVING -Klausel wird nach der SELECT -Anweisung ausgeführt . Es Arten von Filtern die Ergebnisse aus, nachdem Sie alles ausgewählt haben. Bedenken Sie jedoch, dass HAVING langsamer ist. Es funktioniert auf der ganzen Reihe von Reihen.

Aus der MySQL-Dokumentation :

  

Die Klausel HAVING wird nahezu unmittelbar vor dem Senden von Elementen an den Client ohne Optimierung angewendet. (LIMIT wird nach HAVING angewendet.)

     

Der SQL-Standard erfordert, dass HAVING nur auf Spalten in der GROUP BY-Klausel oder auf Spalten verweisen darf, die in Aggregatfunktionen verwendet werden. MySQL unterstützt jedoch eine Erweiterung dieses Verhaltens und erlaubt HAVING, auch auf Spalten in der SELECT-Liste und Spalten in äußeren Unterabfragen zu verweisen.

  

Die HAVING-Klausel kann sich auf Aggregatfunktionen beziehen, was die WHERE-Klausel nicht kann:

%Vor%
  

Verwenden Sie nicht HAVING für Elemente, die in der WHERE-Klausel enthalten sein sollten.

    
Haralan Dobrev 25.03.2013, 15:38
quelle
5

Oder verwenden Sie WHERE ...

%Vor%     
Strawberry 25.03.2013 15:46
quelle
4

Sie können das auch versuchen:

%Vor%     
user1994514 25.03.2013 15:44
quelle
1

Sie müssen 'Haben' -

verwenden %Vor%

Ich bin mir nicht sicher, ob Sie Ihr Alias-Feld verwenden können oder ob Sie schreiben müssen: (accounts.col1 + rechnungen.col2 + rechnungen.col3) & gt; 10000.

Die Anweisung 'where' funktioniert in Verbindung mit 'select': Sie filtert, welche Datensätze zuerst zurückgegeben werden. 'Having' filtert den zurückgesendeten Datensatz, normalerweise, weil die 'Having'-Bedingung zum Zeitpunkt des' select 'nicht bekannt sein konnte.

Um eine einzige Dokumentation zu zitieren: 'Die HAVING-Klausel wurde zu SQL hinzugefügt, weil das WHERE-Schlüsselwort nicht mit Aggregatfunktionen verwendet werden konnte.' Irgendwo anders wird geschrieben ' Die SQL HAVING-Klausel wird in Kombination mit der SQL GROUP BY-Klausel verwendet. Es kann in einer SQL SELECT-Anweisung verwendet werden, um die Datensätze zu filtern, die eine SQL GROUP BY zurückgibt .

    
No'am Newman 25.03.2013 15:44
quelle

Tags und Links