1、用途
Group by子句用于在查询结果集中对记录进行分组,以汇总数据或者为整个分组显示单行的汇总信息。例如一个小公司的工资单,存在job_id, employee_id,salary三个字段分别代表职位,人员id和月薪。记录如下:
工程师 1001 10000
工程师 1002 8000
工程师 1003 8500
秘书 1004 5500
秘书 1005 3000
老板 1006 20000
通过select job_id,MAX(salary) from tablename group by job_id可以得到
工程师 10000
秘书 5500
老板 20000
2、注意
在select子句的后面只可以有两类表达式:统计函数(AVG\MIN\MAX\SUM)和进行分组的列名;
在select子句中的列名必须是进行分组的列,初次之外添加的列名都是错误的,但是,group by子句后面的列名可以不出现在select子句中;
如果使用where子句,那么所有参与分组的计算机的数据必须首先满足where子句的指定条件;
在默认条件下,将按照group by子句指定的分组列升序排列,如果需要重新排列,可以使用order by子句指定新的排列顺序、
3、Having子句
having子句通常和Group子句一起使用,在完成分组结果统计之后,可以使用having子句对分组进行进一步筛选。
having子句和where子句有相似之处,都是定义搜索条件,但是having子句与组有关,而where子句和单个行有关。
对该子句理解有一个方法:
记住select语句中的子句的处理顺序。在select语句中,首先由from子句找到数据表,where子句则解释from子句输出的数据,而having子句则接受来自group by,where或from子句的输入,例如查询最低月薪小于3000的分组
select job_id, MIN(salary) from table name group by job_id having MIN(salary)<3000;