📅  最后修改于: 2023-12-03 14:44:25.234000             🧑  作者: Mango
在SQL查询中, HAVING
子句用于限制由 GROUP BY
生成的行组。 HAVING
子句中允许使用条件表达式,以便进一步过滤数据。
HAVING
子句的基本语法如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING condition;
其中:
SELECT column1, column2, ...
:要查询并返回的列名。FROM table_name
:要查询的表名。WHERE condition
:选择满足条件的行。GROUP BY column1, column2, ...
:将表中的数据按指定列分组。HAVING condition
:指定一个过滤条件,要过滤的行组必须满足此条件。考虑以下示例:你有一个顾客表,其中每个顾客有一些订单,每个订单都有一个订单总额。你想找出每个顾客的订单总额大于100的订单数量。
SELECT customers.customer_id, COUNT(orders.order_id) as num_of_orders
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customers.customer_id
HAVING SUM(orders.order_total) > 100;
该查询返回两列: 'customer_id列列出了所有的客户 ID,
num_of_orders列列出了订单总额大于 100 的订单数。在此查询中,
HAVING子句使用
SUM()` 聚合函数过滤掉不满足条件的行,仅返回订单总额大于 100 的行。
另一个示例:假设您有一个员工表,其中每行数据表示一个员工的姓名,部门和工资。您想找出每个部门中工资最高的员工。
SELECT department, MAX(salary) as highest_salary
FROM employee
GROUP BY department
HAVING MAX(salary) > 5000;
该查询以部门为条件进行分组,然后在每个组中找到具有最高薪水的员工。 HAVING
子句使用 MAX()
聚合函数过滤掉不满足条件的行,即薪水大于 5000 的行。查询结果将显示每个部门的名称和该部门中具有最高薪水的员工的薪水。
HAVING
子句用于对 GROUP BY
分组的数据进行进一步过滤。它允许使用 SUM()
、 MAX()
或其他聚合函数来对数据进行聚合和过滤。 HAVING
子句应该放在 GROUP BY
子句之后。