2012-08-16 66 views
4

從從here採取了一個例子,我想了解什麼呢GROUP BY做的正是:集團是做什麼的?

鑑於這種employee表:

+-------+----------+--------+------------+ 
| Empid | Empname | Salary | DOB  | 
+-------+----------+--------+------------+ 
| 1  | Habib | 2014 | 2004-12-02 | 
| 2  | Karan | 4021 | 2003-04-11 | 
| 3  | Samia | 22  | 2008-02-23 | 
| 4  | Hui Ling | 25  | 2008-10-15 | 
| 5  | Yumie | 29  | 1999-01-26 | 
+-------+----------+--------+------------+ 

執行mysql> select * from employee group by empname;

後我們得到:

+-------+----------+--------+------------+ 
| Empid | Empname | Salary | DOB  | 
+-------+----------+--------+------------+ 
| 1  | Habib | 2014 | 2004-12-02 | 
| 4  | Hui Ling | 25  | 2008-10-15 | 
| 2  | Karan | 4021 | 2003-04-11 | 
| 3  | Samia | 22  | 2008-02-23 | 
| 5  | Yumie | 29  | 1999-01-26 | 
+-------+----------+--------+------------+ 

那麼,這是否意味着GROUP BY強制按鍵排序表?

謝謝

+1

再次嘗試使用包含Empname中重複條目的表。在具有1個條目的「組」上運行聚合函數實際上並沒有多大意義。當你有例如Samia有3個參賽作品,Karan有5個參賽作品。 – Damon 2012-08-16 11:43:03

+1

並回答你的最後一個問題:不,group by不能保證排序 - 你仍然需要添加一個ORDER BY子句來強制進行排序。 – Konerak 2012-08-16 11:48:40

+0

@ Cyber​​Dem0n對,這是我看的第一個地方。但是該頁面沒有描述GROUP BY的功能,只是各種功能具有什麼作用。最終無益。 – Lrdwhyt 2013-02-26 16:02:41

回答

12

GROUP BY啓用摘要。具體來說,它控制着像COUNT(),SUM(),AVG(),MIN(),MAX()等總結函數的使用。在你的例子中沒有太多的總結。

但是,假設您有一個Deptname列。然後,您可以發出此查詢並按Deptname獲得平均工資。

SELECT AVG(Salary) Average, 
     Deptname 
    FROM Employee 
GROUP BY Deptname 
ORDER BY Deptname 

如果您希望將結果集放入特定順序,請使用ORDER BY。