Mysql 使用group by或distinct时如何排序结果?
一些虚拟数据:Mysql 使用group by或distinct时如何排序结果?,mysql,sql,Mysql,Sql,一些虚拟数据: id group_id name score 1 A Tom 20 2 B Jone 17 3 B Jack 19 4 C Tim 18 我想按分数获得不同的组id顺序。这是我的想法: 从表中选择组id按分数排序出来: group_id B C B A group_id A B C 因此,我认为这将通过分数t从表顺序中选择不同的组id,但结果是: group_id B C B A
id group_id name score
1 A Tom 20
2 B Jone 17
3 B Jack 19
4 C Tim 18
我想按分数获得不同的组id顺序。这是我的想法:
从表中选择组id按分数排序出来:
group_id
B
C
B
A
group_id
A
B
C
因此,我认为这将通过分数t从表顺序中选择不同的组id,但结果是:
group_id
B
C
B
A
group_id
A
B
C
从表顺序中选择组id按分数t按组id从表顺序中选择组id也一样
然而,预期的结果是
group_id
B
C
A
我认为这应该很容易,只需要有人表明这一点。我相信这就是你想要的:
select group_id
from table
group by group_id
order by min(score);
我认为你需要使用求和函数按分数对组进行排序,例如
SELECT group_id
FROM table
GROUP BY group_id
ORDER BY SUM(score) DESC;
如果您想按单个条目或聚合值排序,那么您可以用任何其他聚合函数(如MAX、AVG等)替换SUM。这是MySQL的组/聚合函数的文档
所以,我认为这将通过分数t从表顺序中选择不同的组id
内部查询可以被同化为一个表。您的查询是select distinct group_id from t,MySQL没有理由按分数或任何其他列对返回的行进行排序
从表顺序中选择组id按分数t按组id从表顺序中选择组id也一样
同样,没有要求MySQL对行进行排序。GroupBy不按顺序排列,而且它产生了一种不同的东西。你不需要它
您需要的查询在您的问题中表达:
我想按分数获得不同的组id顺序
在SQL中,它非常简单:
SELECT DISTINCT group_by
FROM table
ORDER BY score
那么,有什么解决方案吗?谢谢,我知道group by通常使用聚合函数,但在这种情况下。我只想在一行中与分数进行比较,然后抓住关联组。在这种情况下,正如我在下面的回答中所解释的,用SUMscore代替ORDER,用MINscore代替ORDER,应该可以帮到你。是的,你是对的。我现在明白了。谢谢,非常感谢。这使事情变得美好和干净。