GROUP BY 和 HAVING 子句用于对查询结果进行分组和过滤,它们通常一起使用,但也可以单独使用。
GROUP BY 子句:
GROUP BY
子句用于将查询结果根据一个或多个列进行分组。- 它将具有相同分组列值的行组合在一起,形成一个组。
GROUP BY
子句通常与聚合函数(如SUM
、AVG
、COUNT
、MAX
、MIN
)一起使用,以便对每个组进行计算。
语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...;
示例:
SELECT customer_city, COUNT(*) AS total_customers
FROM customers
GROUP BY customer_city;
假设 customers
表数据如下:
customer_id | customer_name | customer_city |
---|---|---|
1 | 张三 | Beijing |
2 | 李四 | Shanghai |
3 | 王五 | Shanghai |
4 | 赵六 | Beijing |
5 | 孙七 | Shenzhen |
返回结果:
customer_city | total_customers |
---|---|
Beijing | 2 |
Shanghai | 2 |
Shenzhen | 1 |
按 customer_city
列分组,并统计每个城市中的客户数量
HAVING 子句:
HAVING
子句用于过滤分组后的结果集。- 它类似于
WHERE
子句,但HAVING
子句用于过滤组,而WHERE
子句用于过滤行。 HAVING
子句通常与聚合函数一起使用,以便对组进行过滤。
语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING condition;
示例:
SELECT customer_city, COUNT(*) AS total_customers
FROM customers
GROUP BY customer_city
HAVING COUNT(*) > 1;
返回结果:
customer_city | total_customers |
---|---|
Beijing | 2 |
Shanghai | 2 |
按 customer_city
列分组,并统计每个城市中的客户数量,只返回客户数量大于 1 的城市
SELECT order_date, COUNT(*) AS total_orders
FROM orders
GROUP BY order_date
HAVING COUNT(*) > 2;
假设 orders
表数据如下:
order_id | order_date | customer_id |
---|---|---|
101 | 2023-03-01 | 1 |
102 | 2023-03-01 | 2 |
103 | 2023-03-01 | 3 |
104 | 2023-03-02 | 4 |
105 | 2023-03-02 | 5 |
106 | 2023-03-03 | 6 |
返回结果:
order_date | total_orders |
---|---|
2023-03-01 | 3 |
按 order_date
列分组,并统计每个日期的订单数量,只返回订单数量大于 2 的日期
总结:
GROUP BY
子句用于将查询结果进行分组,以便对每个组进行计算。HAVING
子句用于过滤分组后的结果集,以便只返回符合条件的组。GROUP BY
和HAVING
子句通常一起使用,但也可以单独使用。
注意:
HAVING
子句必须放在GROUP BY
子句之后。- 在
HAVING
子句中可以使用聚合函数,但在WHERE
子句中不能使用聚合函数。
求点赞!!!求点赞!!!求点赞!!!
标签:customer,03,GROUP,分组,子句,HAVING From: https://blog.csdn.net/weixin_63698171/article/details/140893134