2011-11-15 75 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