我有一个如下所示的表格式
CREATE TABLE test( qid varchar(255), qor int );
我正在尝试通过qor检索QID顺序,如下所示
SELECT DISTINCT qid from test ORDER BY qor + 0;
但它没有工作,因为我希望它首先排序qor然后从选择中检索不同的qid值。请查看sqlfiddle
答案 0 :(得分:2)
您希望按qid
进行分组。您需要qor
列上的聚合函数。我假设您想要总结qor
的所有qid
SELECT qid, sum(qor) as total_qor
from test
group by qid
ORDER BY total_qor desc;
另一种方法是按最高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,具体取决于你想要处理的情况。