group by 的基本用法
有一張表的數據如下:
表名:salary_info
id | name | salary | date |
1 | zhangsan | 5500 | 2016-4-5 |
2 | lisi | 3500 | 2016-4-5 |
3 | wangwu | 6000 | 2016-4-5 |
4 | lisi | 3800 | 2016-5-5 |
5 | zhangsan | 5500 | 2016-5-5 |
6 | wangwu | 6000 | 2016-5-5 |
7 | zhaoliu | 2000 | 2016-5-5 |
想要統計每個人今年一共發了多少工資。
sql如下:
示例:
select name , sum(salary) from salary_info where to_char(date,'yyyy') = '2016' group by name;
group by 限制select字段:
示例:
select name , sum(salary) , date from salary_info group by name ;
上面示例就會報錯,提示:試圖執行的查詢中不包含作為合計函數一部分的特定表達式,'date'。
注意:這就是需要注意的一點,在select指定的字段要么就要包含在Group By語句的后面,作為分組的依據;要么就要被包含在聚合函數中。
Having與Where的區別
where語句用於group by 分組之前進行過濾數據。
having語句用於group by 分組之后進行數據篩選。
示例:
select name , sum(salary) from salary_info where to_char(date,'yyyy')='2016' group by name having salary >'10000';
如上示例,查詢2016年發的工資大於10000的人的姓名和工資數目。