如何在使用group by或distinct时订购结果?

时间:2017-02-05 15:36:02

标签: mysql sql

一些虚拟数据:

id  group_id name score
1   A         Tom   20
2   B         Jone  17
3   B         Jack  19
4   C         Tim   18

我希望按分数获得不同的group_id顺序。这是我的尝试:

select group_id from table order by score出来了:

group_id
B
C
B
A

所以,我认为这将有效select distinct group_id from (select group_id from table order by score ) t,但它出来了:

group_id
A
B
C

select group_id from (select group_id from table order by score ) t group by group_id相同。

然而,预期的结果是

group_id
B
C
A

我认为这应该很容易,只需要有人说明一点。

3 个答案:

答案 0 :(得分:1)

我相信这就是你想要的:

select group_id
from table 
group by group_id
order by min(score);

答案 1 :(得分:0)

我认为您需要使用SUM功能来按分数对组进行排序,例如

SELECT group_id
FROM table
GROUP BY group_id
ORDER BY SUM(score) DESC;

如果您想按个别条目或聚合值排序,则可以将SUM替换为任何其他聚合函数(例如MAXAVG等)。 Here是MySQL的组/聚合函数的文档。

答案 2 :(得分:0)

  

所以,我认为这将有效select distinct group_id from (select group_id from table order by score ) t

内部查询可以同化为表格。您的查询是select distinct group_id from t,MySQL没有理由按分数或任何其他列对返回的行进行排序。

  

select group_id from (select group_id from table order by score ) t group by group_id相同。

同样,没有请求MySQL订购行。 GROUP BY不订购,无论如何它会产生不同的东西。你不需要它。

您需要的查询在您的问题中表达:

  

我希望按分数获得不同的group_id顺序。

放入SQL它就像:

一样简单
SELECT DISTINCT group_by
FROM table
ORDER BY score