SQL006 数据库整理笔记 (6)组函数和分组

109 阅读2分钟

7. 组函数(聚合函数)

  • 对一组数据处理之后,得到一个结果

7.1 常见的组函数

  • count 统计数量
  • max 统计最大值
  • min 统计最小值
  • avg 统计平均值
  • sum 统计和
-- 统计s_emp中有多个员工,平均工资,最高和最低工资
SQL> SELECT COUNT(id), AVG(salary), MAX(salary), MIN(salary) FROM s_emp;

7.2 组函数中可以使用ditinct

-- 统计s_emp中的工资总和,如果工资相同只统计一次。
SQL> SELECT SUM(salary), SUM(DISTINCT salary) FROM s_emp;

7.3 NULL的处理

  • 组函数对于NULL值是忽略的。
-- 统计s_emp中的提成的个数, 提成的和
SQL> SELECT COUNT(commission_pct), SUM(commission_pct) FROM s_emp;

8. 分组

8.1 分组

  • 按照一定的标准 把数据分成若干组
  • 语法: group by 分组标准
  • 位置: 出现在 where 后面
-- 按照部门号分 ,统计每个部门的人数。
SQL> SELECT dept_id, COUNT(id) FROM s_emp WHERE 1 = 1 GROUP BY dept_id;

注意点:

在分组语句中,select后的字段要么是分组标准,要么是经过合适的组函数处理过的。

-- 按照部门号分组,统计每个部门的平均工资。
SQL> SELECT dept_id, AVG(salary) FROM s_emp GROUP BY dept_id;
​

8.2 分组过滤

  • 分组语句中使用having来进行数据的过滤
-- 按照部门号分组,统计每个部门的平均工资。要求显示工资大于1500
SQL> SELECT dept_id , AVG(salary) FROM s_emp GROUP BY dept_id HAVING AVG(salary) > 1500;

8.3 SQL执行顺序

  • from -> where -> group by -> having -> select -> order by
-- 按照部门号分组,统计每个部门的平均工资。要求显示工资大于1500, 且工资降序排列
SQL> SELECT dept_id, AVG(salary) asal FROM s_emp GROUP BY dept_id HAVING AVG(salary) > 0 ORDER BY asal DESC;