order by 失效问题

2021-02-24 15:27:35 +08:00
 Leo818
SELECT
SUM( IFNULL( r.read_total, 0 ) ) AS ReadCount,
SUM( IFNULL( r.get_total, 0 ) ) AS GetCount
FROM
report_promote_detail AS r
LEFT JOIN pl_promote AS p ON r.promote_id = p.id
WHERE
r.planet_id = 45
AND r.date
GROUP BY
r.promote_id
ORDER BY
ReadCount + GetCount DESC


以上代码,使用两个数的和进行排序结果不对

目前可以有两种方式解决这个问题
1 、
ReadCount + GetCount 换成 SUM( IFNULL( r.read_total, 0 ) ) +SUM( IFNULL( r.get_total, 0 ) )
排序结果是正确的
2 、
SELECT 中 SUM( IFNULL( r.read_total, 0 ) ) +SUM( IFNULL( r.get_total, 0 ) ) AS Total ...... ORDER BY Total DESC
这个结果也没问题

请教下这个是什么情况,为啥两个别名相加不行呢?(之前也这样做过,但是可以,猜测是因为 SUM 函数或者 GROUP BY ?)
2056 次点击
所在节点    MySQL
6 条回复
uselessVisitor
2021-02-24 20:41:58 +08:00
加个括号试试?
uselessVisitor
2021-02-24 21:11:19 +08:00
select sum(count2) as c1,
sum(count1) as c2
from test
group by type
order by c1 + c2 desc
(报错)[42S22][1247] Reference 'c1' not supported (reference to group function)
uselessVisitor
2021-02-24 21:14:22 +08:00
应该和 聚合函数 有关。。好像聚合函数别名不能 order by 。。
Leo818
2021-02-25 09:12:15 +08:00
@beichenhpy 谢谢你的回复,请问下是怎么得到的这个错误提示呢,我用 Navicat 执行是正常的没有报错,要是有报错提示,可能我就没那么纠结这个问题了
uselessVisitor
2021-02-25 09:23:40 +08:00
@Leo818 我用 datagrip 写的。。不懂为啥你不报错。。同事用 oracle 都不允许 order by 使用别名。。
Leo818
2021-02-25 10:55:44 +08:00
@beichenhpy 我朋友试了下,在他们那里也报错,他们用的是 mysql 5.X,我的是 mysql 8.x 就不报错,莫非是我版本问题,又或者我用的是假的?哈哈哈哈,太坑了,要是早就报错,我也不至于那么纠结

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX