通过本文章举例,可以教大家弄懂GROUP BY如何使用
1、表结构分析:
假设我们有两个表:一个是用户表 users
,另一个是订单表 orders
。它们的结构如下:
users 表:
列名 | 类型 | 说明 |
---|---|---|
id | INT | 用户ID(主键) |
username | VARCHAR(50) | 用户名 |
age | INT | 年龄 |
gender | ENUM('M', 'F') | 性别 |
orders 表:
列名 | 类型 | 说明 |
---|---|---|
id | INT | 订单ID(主键) |
user_id | INT | 用户ID(外键) |
product | VARCHAR(100) | 产品名称 |
quantity | INT | 订购数量 |
order_date | DATE | 下单日期 |
现在,我们希望进行一个复杂的查询,要求按照性别统计每个年龄段的订单总量。这需要进行多表联合查询,并使用聚合函数进行分组统计。
2、列举模拟数据
假设我们填充了一些示例数据到 users
表和 orders
表中,数据如下:
users 表数据:
id | username | age | gender |
---|---|---|---|
1 | Alice | 25 | F |
2 | Bob | 35 | M |
3 | Charlie | 40 | M |
4 | David | 20 | M |
5 | Eve | 18 | F |
6 | Frank | 45 | M |
7 | Grace | 55 | F |
8 | Henry | 30 | M |
9 | Irene | 28 | F |
10 | Jack | 22 | M |
orders 表数据:
id | user_id | product | quantity | order_date |
---|---|---|---|---|
1 | 1 | Phone | 2 | 2024-04-01 |
2 | 2 | Laptop | 1 | 2024-04-02 |
3 | 3 | Tablet | 3 | 2024-04-03 |
4 | 4 | Headphone | 2 | 2024-04-04 |
5 | 5 | Speaker | 1 | 2024-04-05 |
6 | 6 | Mouse | 4 | 2024-04-06 |
7 | 7 | Keyboard | 1 | 2024-04-07 |
8 | 8 | Monitor | 2 | 2024-04-08 |
9 | 9 | Printer | 1 | 2024-04-09 |
10 | 10 | Router | 3 | 2024-04-10 |
3、执行sql
执行sql
sql
SELECT
u.gender,
CASE
WHEN u.age BETWEEN 0 AND 18 THEN '0-18'
WHEN u.age BETWEEN 19 AND 35 THEN '19-35'
WHEN u.age BETWEEN 36 AND 50 THEN '36-50'
ELSE '50+'
END AS age_group,
SUM(o.quantity) AS total_orders
FROM
users u
JOIN
orders o ON u.id = o.user_id
GROUP BY
u.gender, age_group
ORDER BY
u.gender, age_group;
4、sql执行结果
现在我们执行上述查询,得到的结果如下所示:
gender | age_group | total_orders |
---|---|---|
F | 0-18 | 1 |
F | 19-35 | 3 |
F | 36-50 | 0 |
F | 50+ | 0 |
M | 0-18 | 1 |
M | 19-35 | 6 |
M | 36-50 | 3 |
M | 50+ | 0 |
这是按照性别和年龄段统计的订单总量。例如,对于女性用户(F),在年龄段为0-18岁的范围内,共有1个订单;在年龄段为19-35岁的范围内,共有3个订单;在其他年龄段内,订单总量都为0。男性用户(M)的情况类似。