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的人的姓名和工资数目。