侧边栏壁纸
博主头像
此昵称不存在 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL HAVING的使用

Administrator
2024-06-24 / 0 评论 / 0 点赞 / 68 阅读 / 0 字

MySQL HAVING的使用

HAVING 子句的用途

HAVING 子句通常用于 SQL 查询中,用于对聚合结果进行过滤。它与 WHERE 子句的区别在于,WHERE 子句在数据分组和聚合之前对行进行过滤,而 HAVING 子句在数据分组和聚合之后对结果进行过滤。

HAVING 的主要用途:

  1. 过滤聚合结果:
    当你使用聚合函数(如 SUM(), COUNT(), AVG(), MAX(), MIN() 等)时,HAVING 子句用于过滤这些聚合结果。例如,过滤出销售总额大于一定值的销售人员。

  2. 基于计算列进行过滤:
    HAVING 子句还可以用于过滤基于计算列的结果,这些计算列在 SELECT 子句中生成。例如,你的查询中计算出的 state 列。

示例
  1. 使用 HAVING 过滤聚合结果
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING total_salary > 100000;

这将返回每个部门的总工资,并且只包含那些总工资超过 100000 的部门。
2. 使用 HAVING 过滤计算列

SELECT *,
       IF(`switch` = 0 OR NOW() > `end_time`, 2,
          IF(`is_pause` = 1, 3,
             IF(NOW() < `start_time`, 0, 1))) AS `state`
FROM `activity`
WHERE `del` = 0
HAVING `state` = 2
ORDER BY `id` DESC;

这将返回 activity 表中的所有列,并计算出 state 列,然后只包含 state 为 2 的行。

HAVING 后面可以拼接 AND 吗?

可以在 HAVING 子句后面拼接 AND 来添加更多的过滤条件。HAVING 子句可以包含多个条件,就像 WHERE 子句一样。多个条件可以使用 AND 和 OR 组合。

示例

以下是一个包含多个条件的 HAVING 子句的示例:

SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING total_salary > 100000 AND COUNT(employee_id) > 10;

这将返回每个部门的总工资,并且只包含那些总工资超过 100000 且员工数量超过 10 的部门。

结合 HAVING 和 WHERE

可以同时使用 WHERE 和 HAVING 子句。例如:

SELECT department, SUM(salary) AS total_salary
FROM employees
WHERE status = 'active'
GROUP BY department
HAVING total_salary > 100000 AND COUNT(employee_id) > 10;

在这个查询中,WHERE 子句首先过滤出状态为 active 的员工,然后 GROUP BY 按部门分组,最后 HAVING 子句过滤出总工资超过 100000 且员工数量超过 10 的部门。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区