想象一下这张桌子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 |
+----------+-------+--------+----------+谢谢。
发布于 2011-11-15 10:40:34
我不知道你为什么说你的查询有效。你也应该按名字分组..。
SELECT group_id, name, COUNT(*) FROM t1 GROUP BY group_id, name如果你只想得到其中的一个,试着:
SELECT group_id, MIN(name), COUNT(*) FROM t1 GROUP BY group_id发布于 2011-11-15 10:36:30
SELECT group_id, name, COUNT(*)
FROM t1
WHERE name IN ( 'xxx', 'yyy', ..., 'zzz' )
GROUP BY group_id
SORT BY COUNT(*)发布于 2011-11-15 10:37:50
我不知道完全控制,但你可以这样做
SELECT student_name, MIN(test_score), MAX(test_score)
FROM student
GROUP BY student_name;https://stackoverflow.com/questions/8134953
复制相似问题