GROUP BY 分组sql查询使用

通过本文章举例,可以教大家弄懂GROUP BY如何使用

1、表结构分析:

假设我们有两个表:一个是用户表 users,另一个是订单表 orders。它们的结构如下:

users 表:

列名类型说明
idINT用户ID(主键)
usernameVARCHAR(50)用户名
ageINT年龄
genderENUM('M', 'F')性别

orders 表:

列名类型说明
idINT订单ID(主键)
user_idINT用户ID(外键)
productVARCHAR(100)产品名称
quantityINT订购数量
order_dateDATE下单日期

现在,我们希望进行一个复杂的查询,要求按照性别统计每个年龄段的订单总量。这需要进行多表联合查询,并使用聚合函数进行分组统计。

2、列举模拟数据

假设我们填充了一些示例数据到 users 表和 orders 表中,数据如下:

users 表数据:

idusernameagegender
1Alice25F
2Bob35M
3Charlie40M
4David20M
5Eve18F
6Frank45M
7Grace55F
8Henry30M
9Irene28F
10Jack22M

orders 表数据:

iduser_idproductquantityorder_date
11Phone22024-04-01
22Laptop12024-04-02
33Tablet32024-04-03
44Headphone22024-04-04
55Speaker12024-04-05
66Mouse42024-04-06
77Keyboard12024-04-07
88Monitor22024-04-08
99Printer12024-04-09
1010Router32024-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执行结果

现在我们执行上述查询,得到的结果如下所示:

genderage_grouptotal_orders
F0-181
F19-353
F36-500
F50+0
M0-181
M19-356
M36-503
M50+0

这是按照性别和年龄段统计的订单总量。例如,对于女性用户(F),在年龄段为0-18岁的范围内,共有1个订单;在年龄段为19-35岁的范围内,共有3个订单;在其他年龄段内,订单总量都为0。男性用户(M)的情况类似。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值