SQL-分组函数及分组查询

常见分组函数

  1. 可以与distinct配合使用
  2. 以下函数运算时均忽略null
sum( column ) 求和,仅支持数值类型
avg( column ) 平均,仅支持数值类型
max( column ) 最大,支持数值、字符等可比较类型
min( column ) 最小,支持数值、字符等可比较类型
count( column ) 计数,仅计算非null单元,支持所有类型

注意:与分组函数一同查询的字段要求为group by (见下文)操作后的字段(保持表格规整)

示例:

1
2
3
#利用 count、distinct 统计工种数目
use myemployees;
select count(distinct job_id) kindnum from employees;
  • count() 函数

    使用*可统计表中所有行的数目,如

    1
    2
    3
    #统计 Tablename 表中所有有效行(不全为null)
    select count(*) from Tablename;
    select count(const) from Tablename;#相当于在非null行前添加'1'的元素,并计数

    注意:count(*)的效率在一些引擎下效率比count(1)高,一般使用前者


分组查询

利用相同元素对数据进行分组管理,使用group by关键字实现。

基础语法

1
2
3
4
5
select column1,ground_func(column2)
from tablename
where conditional_statement #可无
group by expression #expression中理论包含column1
order by column; #可无

注意:查询列表(select后的列)中的元素必须是分组函数或group by 后的字段

示例:

1
2
3
4
5
#查询各部门的,邮箱包含a字符的员工的平均工资
select department_id , avg(salary)
from employees
where email like '%a%'
group by department_id;

分组查询后进行筛选,使用链接关键字having

1
2
3
4
5
#查询各人数大于2的部门人数
select department_id,count(*)
from employees
group by department_id
having count(*)>=2 ;
  1. group by 关键字后可以接用 函数、别名等。分组后支持排序。

  2. 多字段分组,只有多个字段同时相同,才会归并到同一个组。