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(),第二列可能包含来自其他记录的值。这无法解决问题:(请提供更多详细信息,结果是什么?可能只尝试按计数(*)添加订单?)?