自学SQL网 难题笔记

博客记录自学SQL网第十一课Part2的难题,要求按角色分组,统计每个角色有办公室和没办公室的人数,一个角色部分有、部分没有办公室需分开统计。题解先提到用子查询语句,后发现直接操作更简洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学SQL网 难题笔记
自学SQL网 第十一课 Part2
【难题】按角色分组算出每个角色按有办公室和没办公室的统计人数(列出角色,数量,有无办公室,注意一个角色如果部分有办公室,部分没有需分开统计)
原始数据表

RoleNameBuildingYears_employed
EngineerBecky A.1e4
EngineerDan B.1e2
EngineerSharon F.1e6
EngineerDan M.1e4
EngineerMalcom S.1e1
ArtistTylar S.2w2
ArtistSherman D.2w8
ArtistJakob J.2w6
ArtistLillia A.2w7
ArtistBrandon J.2w7
ManagerScott K.1e9
ManagerShirlee M.1e3
ManagerDaria O.2w6
EngineerYancy I.null0
ArtistOliver P.null0

希望输出结果:

countRolebn
1Artist0
5Artist1
1Engineer0
5Engineer1
3Manager1

题解:
需要子查询语句
先通过子查询语句获得如下表:

select Role,(case when Building is not null then 1 else 0 end) bn
from employees
RoleBn
Engineer1
Engineer1
Engineer1
Engineer1
Engineer1
Artist1
Artist1
Artist1
Artist1
Artist1
Manager1
Manager1
Manager1
Engineer0
Artist0

紧接着再分组统计,即可得到预期结果

select role,count(*),bn
from
(select Role,(case when Building is not null then 1 else 0 end) bn
from employees)
where 1
group by role,bn

--------------------------------------分界线---------------------------------------------------
罪过罪过
想复杂了
直接这样更简洁

select role,count(*),(case when Building is not null then 1 else 0 end) bn
from
employees
where 1
group by role,bn
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值