文章目录

  • MySQL——聚合函数和group by分组的使用
    • 1、聚合函数介绍
    • 2、GROUP BY 分组
    • 3、常见的聚合函数
    • 4、SQL执行顺序

MySQL——聚合函数和group by分组的使用

1、聚合函数介绍

SQL聚合函数计算一组数据的集合并返回单个值。

除 COUNT 以外,聚合函数忽略空值,如果COUNT函数的应用对象是一个确定列名,并且该列存在空值,此时COUNT仍会忽略空值。

因为聚合函数对一组值进行操作,所以它通常与SELECT语句的GROUP BY子句一起使用,以计算为每个分组提供信息的度量。

2、GROUP BY 分组

分组是使用数据库时必须处理的最重要任务之一。 要将行分组,使用GROUP BY子句。

GROUP BY子句是SELECT语句的可选子句,它根据指定列中的匹配值将行组合成组,每组返回一行。

GROUP BY子句的语法:

SELECTcolumn1,column2,GROUP_FUNCTION (column3)
FROMtable1
WHEREa = b
GROUP BYcolumn1,column2
HAVINGc = d
ORDER BYcolumn2 DESC;

在SELECT子句中包含聚合函数不是强制性的。 但是,如果使用聚合函数,它将计算每个组的汇总值。

需要强调的是,在对行进行分组之前应用WHERE子句,而在对行进行分组之后应用HAVING子句。 换句话说,WHERE子句应用于行,而HAVING子句应用于分组。

要对组进行排序,请在GROUP BY子句后添加ORDER BY子句。

GROUP BY子句中出现的列称为分组列。 如果分组列包含NULL值,则所有NULL值都汇总到一个分组中,因为GROUP BY子句认为NULL值相等。

3、常见的聚合函数

函数名称 作用
MAX 查询指定列的最大值
MIN 查询指定列的最小值
COUNT 统计查询结果的行数
SUM 求和,返回指定列的总和
AVG 求平均值,返回指定列数据的平均值

AVG/ SUM 只适用于数值类型的字段(或变量)

MAX / MIN 适用于数值类型、字符串类型、日期时间类型的字段(或变量)

使用COUNT(*)、COUNT(1)、COUNT(具体字段) 哪个效率更高:

如果使用的是MyISAM存储引擎,则三者效率相同,都是O(1)

如果使用的是InnoDB存储引擎,则三者效率 COUNT(*) = COUNT(1) >COUNT(字段)

使用实例

-- AVG 计算每个部门的平均工资
SELECT e.department_id,department_name, ROUND(AVG(salary), 0) avg_salary
FROM employees e
JOIN departments d on e.department_id = d.department_id
GROUP BY department_name
ORDER BY department_name;-- SUM 返回每个部门中所有员工的总薪水
SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id;-- MAX / MIN  返回每个部门中员工的最低和最高薪水
SELECT department_name, MIN(salary) min_salary,MAX(salary) max_salary
FROM employees e
JOIN departments d on e.department_id = d.department_id
GROUP BY department_name
ORDER BY department_name;-- COUNT  返回每个部门的人数并根据部门名升序
SELECT department_name, COUNT(*) headcount
FROM employees e
JOIN departments d on e.department_id = d.department_id
GROUP BY department_name
ORDER BY department_name;-- 查询最低薪资大于6000的各个部门的信息、最高薪资和平均薪资
select e.department_id,department_name,min(salary) min_salary,max(salary) max_salary,round(avg(salary),2) average_salary
from employees e
join departments d on e.department_id = d.department_id
GROUP BY e.department_id
having min_salary > 6000
order by department_id ;-- 查找人数大于5的部门
SELECT e.department_id,department_name,COUNT(employee_id) headcount
FROM employees e
JOIN departments d ON d.department_id = e.department_id
GROUP BY e.department_id
HAVING headcount > 5
ORDER BY headcount DESC;#1.where子句可否使用组函数进行过滤?
-- 不可以#2.查询公司员工工资的最大值,最小值,平均值,总和
select max(salary),min(salary),avg(salary),sum(salary) from employees;#3.查询各job_id的员工工资的最大值,最小值,平均值,总和
select job_id, max(salary),min(salary),avg(salary),sum(salary)
from employees
group by job_id;#4.选择各个job_id具有的员工人数
select job_id,count(*)
from employees
group by job_id;#5.查询员工最高工资和最低工资的差距(DIFFERENCE)
select max(salary) - min(salary) DIFFERENCE
from employees;#6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
select emp.employee_id,emp.manager_id, min(emp.salary) min_salary
from employees emp
join employees mang
on emp.manager_id = mang.employee_id
group by emp.manager_id
having min_salary >= 6000;
-- 或
select employee_id,manager_id, min(salary) min_salary
from employees
where manager_id is not null
group by manager_id
having min_salary >= 6000;#7.查询所有部门的名字,location_id,员工数量和平均工资,并按平均工资降序
select department_name,location_id,count(employee_id),round(avg(salary),2) avg_salary
from  departments d
left join employees e on e.department_id = d.department_id
group by department_name
order by avg_salary desc;#8.查询每个工种、每个部门的部门名、工种名和最低工资
select department_name,job_id,min(salary)
from employees e
right join departments d on e.department_id = d.department_id
group by job_id, d.department_id;

4、SQL执行顺序

SELECT 语句的完整结构(SQL99)

select 去重   要查询的字段    from   表(注意:表和字段可以取别名)
xxxx  join 要连接的表     on   等值判断(顺序:先on再where)
where (具体的值/子查询,不包含聚合函数的过滤条件)
group by(通过那个子段来分组)
having (过滤分组后的信息,条件和where一样,位置不同,包含聚合函数的过滤条件)
order by(通过哪个字段排序)
limit (分页)

SQL语句的执行顺序

MySQL——聚合函数和group by分组的使用相关推荐

  1. SELECT执行过程,MySQL聚合函数,多行分组函数,GROUP BY HAVING,详细完整可收藏

    文章目录 1.聚合函数介绍 2.五个常用聚合函数 3.GROUP BY 4.HAVING 5.SELECT的执行过程 1.聚合函数介绍 聚合函数作用于一组数据,并对一组数据返回一个值.聚合函数不能嵌套 ...

  2. 10 MySQL聚合函数数据分组

    目录 聚合函数 一.聚合函数定义: 二.聚合函数类型: 三.使用聚合函数的原则: 四.聚合函数说明 1.AVG 和 SUM 函数: 注意:AVG.SUM函数只对数字类型做处理,其他类型返回0: 1.1 ...

  3. mysql聚合函数count用法_MySQL中聚合函数count的使用和性能优化技巧

    本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是 ...

  4. Mysql 聚合函数嵌套使用

    Mysql 聚合函数嵌套使用 目的:Mysql 聚合函数嵌套使用 聚合函数不可以直接嵌套使用,比如: max(count(*)) 但是可以嵌套子查询使用(先分组取出count值, 再将count值倒序 ...

  5. 选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

    今天用SQL Server尝试实现一个SQL语句的时候,报了如标题所示的错误,通过在百度里面搜索,并亲自动手实现,终于发现问题所在,现在把它记录下来. 语句如下: select [OrderID],[ ...

  6. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  7. 选择列表中的列'sc.cno'无效,因为该列没有包含在聚合函数或者group by 字句中《SQL中的group by该怎么用?》

    1.SQL Server中,子查询不能返回多个值 2.子查询中不能包含ORDER BY子句 3.group by 可以将查询结果按某一列或多列的值进行分组.group by 一般是和聚合函数一起搭配使 ...

  8. mysql 聚合函数嵌套,Mysql 聚合函数嵌套使用操作

    聚合函数不可以直接嵌套使用,比如: max(count(*)) 但是可以嵌套子查询使用 eg: 注:后面那个 as 必须要写 select max(total) from ( select count ...

  9. 选择列表中的列 '.......' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

    错误:消息 8120,级别 16,状态 1,第 51 行 选择列表中的列 'Employee.EmployeeID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中. 题目:查询最低收入 ...

最新文章

  1. 一文回顾深度学习十年发展
  2. selenium模拟H5触摸滑动之-TouchAction
  3. 论文浅尝 | SPARQL 语言的 ASK 查询表达性研究进展
  4. Python 分布式文件系统 Mongodb GridFS
  5. day16 java的访问控制权限
  6. c# mysql 连接
  7. android sim卡分析,Android 判断SIM卡属于哪个移动运营商详解及实例
  8. Spring boot设置文件上传大小限制
  9. 团队项目计划、人员安排以及开发方法
  10. 数字栅格地图矢量化及三维显示教程
  11. win7蓝牙热点自动断开
  12. 大学生破译周鸿祎手机号 李开复放 橄榄枝
  13. C语言实现简单的五子棋
  14. 深入浅出理解视频编码H.264结构
  15. Mysql数据库基础知识总结,结构分明,内容详细
  16. Cpu、核、Java Runtime.getRuntime().availableProcessors()
  17. 自己动手做一款蓝牙小车
  18. MySQL数据库基础知识,基础操作详细整理
  19. Linux 安装并配置 OpenLDAP 新编(1)快速入门指南
  20. JAVA学习笔记—JAVA SE(四)JAVA核心库类(下)

热门文章

  1. 文献阅读09期:基于ADMM方法的柔性负载实时定价
  2. 一、Python的应用场景
  3. 外贸知识通俗教程(中)
  4. 2023届秋招图像算法岗面经记录(TPlink(普联)、潮州三环、中电十所、科大讯飞、旷视、超参数、虹软、大华、速腾聚创、中兴、哲库、字节、OPPO、百度、之江实验室、蚂蚁、Intel、小米)
  5. 巨坑警告!程序员去银行写代码千万别去分行
  6. 欲借“菜篮子”生意赴美上市,叮咚买菜能解生鲜电商近渴吗?
  7. 骁龙660是32位还是64位_微信有32位与64位,很多人不知道~
  8. 2022保密教育线上培训考试 04
  9. 11_JavaScript数据结构与算法(十一)树
  10. ComboxBox 调整字体