MySql-DQL-分组查询

本文详细解释了如何在MySQL中使用分组查询,包括根据性别和入职时间统计员工数量,并对比了WHERE和HAVING子句的作用,强调WHERE用于预筛选行,HAVING则用于分组后的条件过滤。
摘要由CSDN通过智能技术生成

分组查询

分组: 按照某一列或者某几列,把相同的数据进行合并输出。

分组其实就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。

分组查询通常会使用聚合函数进行计算。

语法:

select  字段列表  from  表名  [where 条件]  group by 分组字段名  [having 分组后过滤条件];

根据性别分组 , 统计男性和女性员工的数量

select gender, count(*)
from tb_emp
group by gender; -- 按照gender字段进行分组(gender字段下相同的数据归为一组)

在这里插入图片描述

查询入职时间在 ‘2015-01-01’ (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位

select job, count(*)
from tb_emp
where entrydate <= '2015-01-01'   -- 分组前条件
group by job                      -- 按照job字段分组
having count(*) >= 2;             -- 分组后条件

在这里插入图片描述

where与having区别

在MySQL中,WHERE 和 HAVING 子句都用于过滤查询结果的行,但它们在查询执行过程中的使用阶段不同,而且用途也有所不同:

1.WHERE 子句:

  • WHERE 子句用于在任何分组或聚合操作之前过滤行。
  • 它与 SELECT、UPDATE、DELETE 和 INSERT INTO … SELECT 语句一起使用。
  • 它根据 WHERE 子句中指定的特定条件过滤行。
  • WHERE 子句中的条件适用于结果集中的各个行。
  • 它用于根据特定条件或一组条件限制查询返回的行数。
    示例:
   SELECT * FROM employees WHERE department_id = 1;

2.HAVING 子句:

  • HAVING 子句用于在执行分组后的查询中过滤行。
  • 它与 GROUP BY 子句一起使用,根据指定条件过滤分组后的行。
  • 它根据 GROUP BY 子句计算的聚合值(如 COUNT、SUM、AVG、MAX、MIN)过滤行。
  • HAVING 子句中的条件适用于 GROUP BY 操作生成的行组。
  • 它用于根据聚合值过滤行组。
    示例:
  SELECT department_id, COUNT(*) AS employee_count 
   FROM employees 
   GROUP BY department_id 
   HAVING COUNT(*) &gt; 5;

所以,WHERE 用于在进行任何分组之前过滤行,而 HAVING 用于在执行 GROUP BY 操作后过滤分组后的行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值