分组函数是:group by
从别的地方看到对group by 的解释,还不错,我来借鉴借鉴。group 是分组,by后边是字段名,表示SQL语句是按照那个字段进行分组的。
与group by联合使用的函数:
- count() 计数
- sum() 求和
- avg() 平均数
- max() 最大值
- min() 最小值
group by的用法:
select 字段名1,字段名2,...... from 表名 group by 字段名1,字段名2,......
不一定是同一个字段,也许是不同的字段。
group by 后边的字段名是先按字段名1进行分组,然后按照字段名2进行分组,如果 有还有其他的字段名,以此类推。
举例说明:
select deptno ,count(*) 部门人数 from emp group by deptno order by deptno asc
group by分组函数的特点:
- 使用分组函数后,在select语句中只允许出现分组字段和多行函数。
- 如果是多字段分组,则先按照第一字段分组,然后每个小组继续按照 第二个字段继续分组,以此类推。
- 在where字句中不允许出现多行函数。
分组筛选:使用关键字having
having的作用:针对分组进行分组后的数据筛选,允许用多行函数。
注意:having关键字必须和分组函数结合使用,不允许单独使用。
举例说明:
where和having的区别:
- where不允许出现多行函数,having允许出现多行函数
- where子句和having子句都可以使用普通字段直接进行筛选,但是where的效率高于having
- where执行的顺序:from——>where——>group by——>select——order by
- having执行的顺序:from——>group by——>select——>having——>order by
- 结论:在分组 语句中,使用where进行字段级别的筛选,使用having进行多行函数的筛选。