2016-07-29 10 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입니까? MySQL은 보통 'ORDER BY' 절에서 별명을 사용하는 데 문제가 없지만 MS SQL (오라클에 대해서는 확실하지 않음)에서 별명을 사용할 수 없으므로 표현식을 반복해야합니다. – Uueerdo

답변

3

같은 선택 표현에 자신의 별명으로 열을 참조 할 수 없기 때문에이 옵션 ... 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 
관련 문제