Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用group by或distinct时如何排序结果?_Mysql_Sql - Fatal编程技术网

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,应该可以帮到你。是的,你是对的。我现在明白了。谢谢,非常感谢。这使事情变得美好和干净。