这个SQL SELECT查询提供了我想要的所有行,但是ORDER BY子句似乎没有与我定义的别名配合使用。
SELECT
IFNULL(AVG(ratings.rating), 0) AS avgrating,
users.username,
content.*
FROM content
LEFT JOIN ratings
ON ratings.contentid = content.id
LEFT JOIN users
ON users.id = content.userid
GROUP BY id
ORDER BY
avgrating DESC,
id DESC;它不是先按avgrating排序,再按id排序,而是只按id排序。我查看了类似问题的答案,但没有一条对我的情况有帮助。对如何解决这个问题有什么想法吗?如果我应该提供更多信息,请让我知道。
谢谢!
编辑:这是结果数据。请原谅无意义的占位符文本。
avgrating username id title content category userid
3.0000 jijoij 11 nuunun "foo" 0 2
0.0000 jijoij 10 regreg "foo" 3 2
0.0000 jijoij 9 fefefe "foo" 3 2
0.0000 testkonto 8 i34jt4jt "foo" 3 4
0.0000 testkonto 7 oouo "foo" 3 4
0.0000 testkonto 6 oyouuoouo "foo" 3 4
5.0000 testkonto 5 oyouuouo "foo" 3 4
1.0000 testkonto 4 jijijijiji "foo" 3 4
0.0000 testkonto 3 fgreg "foo" 3 4
0.0000 testkonto 2 tbtrb "foo" 3 4
3.6667 jijoij 1 gergj "foo" 1 2编辑2:我尝试在ORDER BY子句中指定content.id,因为这正是我想要的。一切都没有改变。
发布于 2016-10-13 02:22:58
I put this together in SQLFiddle和它揭示了这个问题。
avgrating username id userid
5 joe 1 1
4 joe 2 1
3 joe 3 1
2 jill 5 4
2 jill 6 4
1 bob 4 3它是按content.id分组和排序的。我怀疑特工想要的是users.id问题是:
GROUP BY id
ORDER BY
avgrating DESC,
id DESC;id不明确。所有这些表(至少在我的模式中)都有一个id列。我不确定是否有标准的方法来解决这个问题,但MySQL似乎选择了content.id,因为查询是FROM content。
解决方案是使id列明确。
GROUP BY users.id
ORDER BY
avgrating DESC,
users.id DESC;avgrating username id userid
4 joe 1 1
2 jill 5 4
1 bob 4 3https://stackoverflow.com/questions/40005399
复制相似问题