Mysql 如何计算两个别名的差值进行排序

Mysql 如何计算两个别名的差值进行排序,mysql,reference,alias,Mysql,Reference,Alias,考虑到以下准则: 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.cl

考虑到以下准则:

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
为了排序,我试图计算两个别名计算值的差值,但得到以下错误:

不支持引用“总积分”(引用集团职能部门)


我做错了什么?如何使用两个别名之间的差值对结果排序?

在同一个select表达式中,不能按别名引用列,因此有两个选项

按(yuk)的顺序重复
中的表达式:

或者在大脑中更容易维护(),通过子查询进行排序:

select * from (
  <your query without the ORDER BY>
) q
ORDER BY total_credit - total_debit
从中选择*(
)q
按贷记总额-贷记总额排序的订单

在何时何地可以使用这样的别名有限制。这是其中之一。您必须将整个别名表达式复制到
order by
中。或者围绕这个问题包装另一个查询,并对“meta”结果进行排序。您将别名表达式复制到order by表达式的技巧向我展示了解决此问题的正确方法。非常感谢你的帮助。我想把这归功于你,但我认为这是不可能的,因为这是一个评论。你确定这是MySQL吗?MySQL在
ORDER BY
子句中使用别名通常没有问题,在MS SQL(不确定Oracle)中,您不能使用别名,必须重复表达式。100%确定这是MySQL。检查MarcB和Bohemian评论以及类似的解决方案。
select * from (
  <your query without the ORDER BY>
) q
ORDER BY total_credit - total_debit