sql题:联表查询+分组

题干:给定一个店铺直播间的用户付款时间表和用户标签表,表结构如下

mysql> desc shop_pay;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| shop_id  | int(11)  | YES  |     | NULL    |       |
| room_id  | int(11)  | YES  |     | NULL    |       |
| user_id  | int(11)  | YES  |     | NULL    |       |
| pay_time | datetime | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> desc user_label;
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| user_id | int(11)  | YES  |     | NULL    |       |
| gender  | char(40) | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

insert into shop_pay values(101,201,301,now());
insert into shop_pay values(101,201,302,now());
insert into shop_pay values(101,201,303,now());
insert into shop_pay values(101,201,304,now());
insert into shop_pay values(101,202,301,now());
insert into shop_pay values(101,202,302,now());
insert into shop_pay values(101,202,303,now());
insert into shop_pay values(101,202,304,now());
insert into shop_pay values(102,201,301,now());
insert into shop_pay values(102,201,302,now());
insert into shop_pay values(102,201,303,now());
insert into shop_pay values(102,201,304,now());
insert into shop_pay values(102,201,305,now());
insert into shop_pay values(102,201,306,now());
insert into shop_pay values(102,201,307,now());
insert into shop_pay values(101,201,308,now());


insert into user_label values(301,'male');
insert into user_label values(302,'male');
insert into user_label values(303,'male');
insert into user_label values(304,'female');
insert into user_label values(305,'female');
insert into user_label values(306,null);

一、统计店铺直播间维度的男女用户人数

select 
    shop_id,
    room_id,
    sum(case gender when 'male' then 1 else 0 end) as male,
    sum(case gender when 'female' then 1 else 0 end) as female
from 
    (select distinct shop_id,room_id,user_id from shop_pay) a 
    inner join 
    user_label b 
    on a.user_id=b.user_id 
group by 
    shop_id,room_id;
select 
    shop_id,
    room_id,
    sum(if(gender='male',1,0)) as male,
    sum(if(gender='female',1,0)) as female 
from 
    (select distinct shop_id,room_id,user_id from shop_pay) a 
    inner join 
    user_label b 
    on a.user_id=b.user_id 
group by 
    shop_id,room_id;

二、找出某个店铺直播间的男女用户人数

select 
    shop_id,
    room_id,
    sum(case gender when 'male' then 1 else 0 end) as male,
    sum(case gender when 'female' then 1 else 0 end) as female
from 
    (select distinct shop_id,room_id,user_id from shop_pay) a 
    inner join 
    user_label b 
    on a.user_id=b.user_id 
group by 
    shop_id,room_id
having
    shop_id=101 and room_id=201;

三、找出店铺直播间没有标签的用户数

select 
    shop_id,
    room_id,
    count(a.user_id) 
from 
    (select distinct shop_id,room_id,user_id from shop_pay) a 
    left join 
    user_label b 
    on a.user_id=b.user_id 
where 
    gender is null 
    group by shop_id,room_id;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值