2016-07-29 8 views
1

Betrachtet man den folgenden Code Sortierung:Wie berechne ich den Unterschied von zwei Alias ​​für

SELECT SUM(w.valor), 
SUM(CASE WHEN w.tipo = '+' THEN w.valor ELSE 0 END) AS total_credit, 
SUM(CASE WHEN w.tipo = '-' THEN w.valor ELSE 0 END) AS total_debit, 
w.clientUNIQUE, 
c.client as cclient 
FROM wallet AS w 
LEFT JOIN clients AS c ON w.clientUNIQUE = c.clientUNIQUE 
WHERE w.status='V' 
GROUP BY w.clientUNIQUE 
ORDER BY total_credit-total_debit 

Ich versuche, die Differenz von zwei aliased berechneten Werte für die Sortierung Zwecke zu berechnen, aber ich erhalte die folgende Fehler:

Was mache ich falsch und wie kann ich Ergebnisse bestellen, indem ich den Differenzwert zwischen den beiden Aliasen verwende?

+1

gibt es Beschränkungen, wo/wenn Sie Aliase wie das verwenden können. Das ist einer von ihnen. Sie müssen den gesamten Alias-Ausdruck in die "Reihenfolge nach" kopieren. Oder wickle vielleicht eine andere Abfrage um diese und ordne die "Meta" -Ergebnisse an. –

+0

Ihr Tipp, den Alias-Ausdruck in die Reihenfolge nach Ausdruck zu kopieren, zeigte mir den richtigen Weg, ihn zu lösen. Vielen Dank für deine Hilfe. Ich möchte dir dafür danken, aber ich thnik das ist nicht möglich, da dies ein Kommentar war. –

+0

Sind Sie sicher, dass dies MySQL ist? MySQL hat normalerweise kein Problem mit Aliasen in 'ORDER BY' Klauseln, in MS SQL (nicht sicher über Oracle) können Sie den Alias ​​nicht verwenden und müssen den Ausdruck wiederholen. – Uueerdo

Antwort

3

Sie können nicht auf die Spalten von ihren Alias ​​in der gleichen Auswahl Ausdruck beziehen, so gibt es zwei Optionen ...

Wiederholen Sie die Ausdrücke in der order by (igitt):

ORDER BY 
    SUM(CASE WHEN w.tipo = '+' THEN w.valor ELSE 0 END) AS total_credit - 
    SUM(CASE WHEN w.tipo = '-' THEN w.valor ELSE 0 END) AS total_debit 

Or leichter auf das Gehirn und leichter zu pflegen (DRY), um über eine Sub-Abfrage:

select * from (
    <your query without the ORDER BY> 
) q 
ORDER BY total_credit - total_debit