Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 按agregats对组进行排序_Mysql_Group By - Fatal编程技术网

Mysql 按agregats对组进行排序

Mysql 按agregats对组进行排序,mysql,group-by,Mysql,Group By,想象一下这个表t1 +----------+-------+--------+ | group_id | name | age | +----------+-------+--------+ | 1 | A1 | 1 | | 1 | A2 | 2 | | 1 | A3 | 3 | | 2 | B1 | 4 | +----------+-------+--------+

想象一下这个表
t1

+----------+-------+--------+
| group_id |  name |  age   |
+----------+-------+--------+
|    1     |   A1  |   1    |
|    1     |   A2  |   2    |
|    1     |   A3  |   3    |
|    2     |   B1  |   4    |
+----------+-------+--------+
在MySQL中使用以下查询

SELECT group_id, name, COUNT(*) FROM t1 GROUP BY group_id
我们得到

+----------+-------+--------+----------+
| group_id |  name |  age   | COUNT(*) |
+----------+-------+--------+----------+
|    1     |   A1  |   2    |    3     |
|    2     |   B1  |   4    |    1     |
+----------+-------+--------+----------+
正如您在这里看到的,name=A1和age=2可能不是来自同一条记录


我的问题是,如何控制显示的
name
age
列中的哪一个结果,从而使内容来自一条记录?有没有办法以某种方式对它们进行排序?例如,按年龄按相反顺序排序

+----------+-------+--------+----------+
| group_id |  name |  age   | COUNT(*) |
+----------+-------+--------+----------+
|    1     |   A3  |   3    |    3     |
|    2     |   B1  |   4    |    1     |
+----------+-------+--------+----------+

谢谢。

我不知道完全控制,但你可以这样做

SELECT group_id, name, COUNT(*)
FROM t1 
WHERE name IN ( 'xxx', 'yyy', ..., 'zzz' )
GROUP BY group_id
SORT BY COUNT(*)
SELECT student_name, MIN(test_score), MAX(test_score)
        FROM student
        GROUP BY student_name;

我不知道你为什么说你的查询有效。您还应该按名称分组

SELECT group_id, name, COUNT(*) FROM t1 GROUP BY group_id, name
如果只想获得其中一个,请尝试:

SELECT group_id, MIN(name), COUNT(*) FROM t1 GROUP BY group_id

在MySQL中,我的查询应该可以工作。问题是我需要来自一条记录的数据。如果使用MIN(),第二列可能包含来自其他记录的值。这无法解决问题:(请提供更多详细信息,结果是什么?可能只尝试按计数(*)添加订单?)?