2012-08-16 49 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。