首页 > 技术文章 > 第六节:分组函数

niujifei 2021-06-15 17:26 原文

一、分组函数

  1、分组函数

    功能:用作统计使用,又称为聚合函数或统计函数或组函数;

  2、分类

sum 求和
avg 平均值
max 最大值
min 最小值
count 计算个数

  

  3、特点

    (1)sum 与 avg 一般用于处理数值型;max、min、count 可以处理任何类型;
    (2)以上所有的分组函数都忽略 null 值;
    (3)可以和 distinct 搭配去实现去重的运算,即先去重,再进行运算;
    (4)count 函数的单独介绍一般使用 count(*) 用作统计行数;
    (5)和分组函数一同查询的字段要求是 group by 后的字段;

 

二、案例

  1、简单使用

SELECT SUM(salary) FROM employees;

SELECT AVG(salary) FROM employees;

SELECT MIN(salary) FROM employees;

SELECT MAX(salary) FROM employees;

SELECT COUNT(salary) FROM employees;

SELECT SUM(salary) 和, AVG(salary) 平均, MAX(salary) 最高, MIN(salary) 最低, COUNT(salary) 个数 FROM employees;

SELECT ROUND(AVG(salary), 2) FROM employees;

  

  2、参数支持哪些类型

SELECT SUM(last_name), AVG(last_name) FROM employees;  #不支持字符型

SELECT MAX(last_name), MIN(last_name), COUNT(last_name) FROM employees; #支持字符型

SELECT MAX(hiredate), MIN(hiredate), COUNT(hiredate) FROM employees;    #支持日期等类型

SELECT COUNT(commission_pct) FROM employees;  #不支持 null

SELECT COUNT(last_name) FROM employees;       # 支持字符型

  

  3、是否忽略 null 值

SELECT SUM(commission_pct), AVG(commission_pct) FROM employees;  #不包含 null值


SELECT SUM(commission_pct), AVG(commission_pct), SUM(commission_pct)/35,SUM(commission_pct)/107
FROM employees;


SELECT MAX(commission_pct), MIN(commission_pct), COUNT(commission_pct) FROM employees;  #不包含null值


SELECT COUNT(commission_pct) FROM employees;  #不会统计 null 值

  

  4、与 distinct 搭配

    聚合函数可以和 distinct 搭配使用。

    案例:

SELECT SUM(DISTINCT salary), SUM(salary) FROM employees;

SELECT COUNT(DISTINCT salary), COUNT(salary) FROM employees;

  

  5、count 详细介绍

    count() 用于统计记录的个数,里面参数可以是字段名或常量值。

    案例:

SELECT COUNT(salary) FROM employees;

SELECT COUNT(*) FROM employees;  #统计总行数,只要有任何一个字段不为null就计数

SELECT COUNT(1) FROM employees;  #统计总行数,为每行前面加一个字段,然后统计有多少行

SELECT COUNT('A') FROM employees; #相当于为每行前面加一个常量值,然后统计行数

  

  6、和分组函数一同查询的字段有限制

    和分组函数一同查询的字段一般都需要明确的意义,像下面的SQL语句可以正常执行,但是没有任何意义。

    例如:

SELECT AVG(salary), employee_id FROM employees;

  

 

三、练习

  1、查询公司员工工资的最大值,最小值,平均值,总和

SELECT 
  MAX(salary) 最大值,
  MIN(salary) 最小值,
  AVG(salary) 平均值,
  SUM(salary) 和 
FROM
  employees ;

  

  2、查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE)

    datediff(date1, date2):计算两个日期的时间差。

    例如:

SELECT DATEDIFF('1995-2-7','1995-2-4'); #3

     利用函数

SELECT 
  DATEDIFF(MAX(hiredate), MIN(hiredate)) DIFFRENCE 
FROM
  employees ;  #8735

 

  3、查询部门编号为 90 的员工个数

SELECT 
  COUNT(*) 
FROM
  employees 
WHERE department_id = 90 ;

  

 

 

 

 

推荐阅读