2011-11-15 76 views
0

想象一下这个表t1排序GROUP BY agregats

+----------+-------+--------+ 
| 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不是来自同一记录。


我的问题是,我怎么可以控制单个结果形成nameage列显示,所以内容是从一个记录?有没有办法以某种方式对它们进行排序?例如按相反顺序按年龄排序会给

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

谢谢。

回答

0
SELECT group_id, name, COUNT(*) 
FROM t1 
WHERE name IN ('xxx', 'yyy', ..., 'zzz') 
GROUP BY group_id 
SORT BY COUNT(*) 
0

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

SELECT student_name, MIN(test_score), MAX(test_score) 
     FROM student 
     GROUP BY student_name; 
+0

这不会SOVE问题:( – ddofborg

+0

请提供一些更多的细节,什么如果你使用MIN(),第二个其他列可能需要作为结果?也许尝试只是添加ORDER BY计数(*)? – pomaxa

1

我不知道你为什么说你的查询工作。你也应该按名称组...

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

如果你想只是其中之一,请尝试:

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

在MySQL中,我的查询应该工作。问题是我想从一个记录中得到数据 如果使用MIN包含来自不同记录的值。 – ddofborg