08-聚合函数

81 阅读1分钟

1、AVG 用于数据值类型,平均数

# 员工平均工资
SELECT AVG(salary) as agv_salary FROM employees;
+-------------+
| agv_salary  |
+-------------+
| 6461.682243 |
+-------------+

2、SUM 用于数据值类型,总数

# 员工月工资总和
SELECT SUM(salary) as sum_salary FROM employees;
+------------+
| sum_salary |
+------------+
|  691400.00 |
+------------+

3、MAX / MIN 适用于数值型,字符串,日期时间类型

# 员工是最高工资 / 最低工资 
SELECT MAX(salary) as max_salary, MIN(salary) as min_salary FROM employees;
+------------+------------+
| max_salary | min_salary |
+------------+------------+
|   24000.00 |    2100.00 |
+------------+------------+

4、COUNT 计算指字字段在查询结构中出现的次数(不含NULL值)

SELECT COUNT(*) 'count_*',COUNT(1) as 'count_1',COUNT(employee_id) as 'count_employee_id' FROM employees
+---------+---------+-------------------+
| count_* | count_1 | count_employee_id |
+---------+---------+-------------------+
|     107 |     107 |               107 |
+---------+---------+-------------------+

5、GROUP BY

#需求:查询各个部门的平均工资
SELECT department_id, AVG(salary) as avg_salary FROM employees GROUP BY department_id;
+---------------+--------------+
| department_id | avg_salary   |
+---------------+--------------+
|          NULL |  7000.000000 |
|            10 |  4400.000000 |
|            20 |  9500.000000 |
|            30 |  4150.000000 |
|            40 |  6500.000000 |
|            50 |  3475.555556 |
|            60 |  5760.000000 |
|            70 | 10000.000000 |
|            80 |  8955.882353 |
|            90 | 19333.333333 |
|           100 |  8600.000000 |
|           110 | 10150.000000 |
+---------------+--------------+
#需求:查询各个department_id,job_id的平均工资
SELECT department_id,job_id,AVG(salary) avg_salary FROM employees GROUP BY department_id,job_id;
+---------------+------------+--------------+
| department_id | job_id     | avg_salary   |
+---------------+------------+--------------+
|          NULL | SA_REP     |  7000.000000 |
|            10 | AD_ASST    |  4400.000000 |
|            20 | MK_MAN     | 13000.000000 |
|            20 | MK_REP     |  6000.000000 |
|            30 | PU_CLERK   |  2780.000000 |
|            30 | PU_MAN     | 11000.000000 |
|            40 | HR_REP     |  6500.000000 |
|            50 | SH_CLERK   |  3215.000000 |
|            50 | ST_CLERK   |  2785.000000 |
|            50 | ST_MAN     |  7280.000000 |
|            60 | IT_PROG    |  5760.000000 |
|            70 | PR_REP     | 10000.000000 |
|            80 | SA_MAN     | 12200.000000 |
|            80 | SA_REP     |  8396.551724 |
|            90 | AD_PRES    | 24000.000000 |
|            90 | AD_VP      | 17000.000000 |
|           100 | FI_ACCOUNT |  7920.000000 |
|           100 | FI_MGR     | 12000.000000 |
|           110 | AC_ACCOUNT |  8300.000000 |
|           110 | AC_MGR     | 12000.000000 |
+---------------+------------+--------------+

结论:当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中。 当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但是,