【发布时间】:2016-08-16 12:41:53
【问题描述】:
我不是数据库专家,我不明白为什么这个简单的案例在 5.6 上完美运行,但在 5.7 上却以奇怪的方式失败。
用例:获取排名靠前的漫画列表以及标题、作者等信息......
只要我只选择非文本列,那么它就可以正确排序
SELECT c.id, c.title IF(AVG(r.score) IS NOT NULL, AVG(r.score), 0) as `rateScore`, COUNT(r.`entityId`) as `rateCount`
FROM `manga_comic` as c
LEFT JOIN `base_rate` as r
ON( r.`entityType` = 'comic' AND c.id = r.`entityId` )
GROUP BY c.`id`
ORDER BY `rateScore` DESC, rateCount DESC
添加诸如“c.description”之类的文本列将忽略 rateScore 而重视 rateCount。
再一次,对我来说只有 5.7(或者可能是一些搞砸了的配置)。我希望不要因为升级到mysql 5.7而重新编码很多屏幕
【问题讨论】:
-
被添加的文本列是否同时包含在 select 和 group by 中?
-
@e4c5 :这是一些“认真”的快速回复,看起来很有希望,谢谢
-
我看不出添加
c.description(我假设的选择子句)会对group by或order by产生任何影响。它甚至不必添加到group by,因为它在功能上依赖于c.id。你能详细说明一下到底有什么不同吗? (我不理解您的解释“将忽略 rateScore 而重视 rateCount”。)您可以发布导致问题的更改查询吗? -
这会导致语法错误
标签: mysql group-by sql-order-by