2016-07-29 55 views
1

考慮下面的代碼:如何計算兩個別名的差異進行排序

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 

我試圖計算排序目的的兩個別名計算值之差,但我發現了以下錯誤:

Reference 'total_credit' not supported (reference to group function)

我在做什麼錯誤,我如何使用兩個別名之間的差值來排序結果?

+1

有在哪裏/當你可以用這樣的別名限制。這是其中之一。你必須將整個別名表達式複製到'order by'中。或者可能包裹另一個查詢,並訂購「元」結果。 –

+0

您的提示將別名表達式複製到表達式的順序中,顯示了我解決這個問題的正確方法。非常感謝您的幫助。我想讚揚你,但是我不可能這樣做,因爲這是一個評論。 –

+0

你確定這是MySQL嗎?在ORDER BY子句中使用別名時,MySQL通常沒有問題,在MS SQL(不確定Oracle)中,不能使用別名並且必須重複表達式。 – Uueerdo

回答

3

您無法通過自己的別名在同一個選擇表達式引用列,所以有2個選項...在order by

重複表達式(議員):

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 

或者更容易對大腦和更容易通過子查詢維持(DRY),順序爲:

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