为什么整数列上的ORDER BY无法按预期工作

时间:2014-07-30 20:24:39

标签: mysql

我有一个如下所示的表格式

CREATE TABLE test( qid varchar(255), qor int );

我正在尝试通过qor检索QID顺序,如下所示

SELECT DISTINCT qid from test ORDER BY qor + 0;

但它没有工作,因为我希望它首先排序qor然后从选择中检索不同的qid值。请查看sqlfiddle

2 个答案:

答案 0 :(得分:2)

您希望按qid进行分组。您需要qor列上的聚合函数。我假设您想要总结qor的所有qid

SELECT qid, sum(qor) as total_qor
from test 
group by qid
ORDER BY total_qor desc;

SQLFiddle demo

另一种方法是按最高qor排序。然后使用max()代替sum()

答案 1 :(得分:2)

  

我希望它先排序qor然后检索不同的qid值

这不是它的工作原理。首先处理不同的值,稍后处理订单。否则,想象一下这个数据:

qid    qor
'foo'    0
'bar'    1
'foo'    2

如果它首先按qor排序(此处已经完成),结果记录的顺序是什么?在foo之前或之后是bar吗? “”。正如你在这里以及对另一个答案的评论中所看到的那样,前三个响应的人以不同的方式解释它:一个SUM,一个MAX和一个MIN。这不好。

如果MySql遵循ansi规则,你所拥有的甚至不是合法的sql,因为在qid分组后(这是distinct运算符所做的),无法知道哪个{ {1}}值用于结果。 ANSI SQL需要在聚合操作(如distinct)之后使用的任何列都是聚合的一部分,原因就像我刚才演示的那样。

你可以做的是这样的事情:

qor

当然,MAX,AVG等也可以使用而不是MIN,具体取决于你想要处理的情况。