为什么这个SQL查询不按我的别名排序?

时间:2016-10-12 18:02:35

标签: mysql sql

这个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:我已经尝试在content.id子句中指定ORDER BY,因为那是我想要的那个。没有任何改变。

1 个答案:

答案 0 :(得分:1)

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进行分组和排序。我怀疑OP想要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;

Here's the result

avgrating   username    id  userid
4           joe         1   1
2           jill        5   4
1           bob         4   3