1.分组函数:

  count  (统计,取得记录数)

  sum  (求和)

  avg  (取平均)

  max  (取最大的数)

  min  (取最小的数)

  注意:分组函数自动忽略空值,不需要手动加where条件排除空值。

  select count(*)from emp where xxx    (符合条件的所有记录总数)

  select count(comm)from emp       (comm这个字段中不为空的元素总数)

  注意:分组函数不能直接使用在where关键字后面

  distinct  (去除重复记录,distinct只能出现在所有字段的最前方)

分组查询:

  1.分组查询设计到的两个子句是:

    group by

    having

  2.group by:

    order by【表示通过哪个或者哪些字段进行排序】

    group by【表示通过哪个或者哪些字段进行分组】

    重点:若一条DQL语句当中有group by 子句,那么select关键字后面只能跟参与分组的字段和分组函数。

    where关键字后面不能直接使用分组函数。

    分组函数必须在分组完成之后执行,而分组需要group by,而group by在where后执行。

  3.having:

    having和where功能都是为了完成数据的过滤

    where 和having后面都添加条件

    where在group by之前完成过滤

    having在group by 之后完成过滤 

    原则:

      尽量在where中过滤,无法过滤的数据,通常都是需要先分组之后再过滤,这个时候可以选择使用having。

      效率问题。

 

一个完整的DQL语句的总结:

  select

    ...

  from

    ...

  where

    ...

  group by

    ...

  having

    ...

  order by

    ...

  第一:以上的关键字顺序不能变,严格遵守。

  第二:执行顺序:

    1.from      (从某张表中检索数据)

    2.where    (经过某条件进行过滤)

    3.group by   (然后分组)

    4.having    (分组之后补满意再过滤)

    5.select    (查询出来)

    6.order by   (排序输出)