SQL面试题挑战10:累计占比

SQL面试题挑战10:累计占比

问题

问题:现在有一张每个年份的每个部门的收入表。现在需要算每个部门的收入占同类型部门的收入的占比和当年整个公司的收入占比。要求一条SQL计算出来。比如研发部和产品部属于同类型的,都是产研;财务部和人事部都属于职能。

 year    dept    income type
2023    研发部    5000   产研
2023    产品部    6000   产研
2023    财务部    7000   职能
2023    人事部    8000   职能

建表语句

drop table if exists incomes;
create table incomes(
    year varchar(20),
    dept varchar(20),
    income decimal(16,2),
    type varchar(10)
);
insert into incomes values
('2023', '研发部',5000, '产研'),
('2023', '产品部',6000, '产研'),
('2023', '财务部',7000, '职能'),
('2023', '人事部',8000, '职能'

解答

思路:

利用开窗分组聚合即可

完整查询如下

select year,
       dept,
       round(
               income / sum(income) over (partition by year),
               2
       ) total_ratio,
       round(
               income / sum(income) over (partition by year,type),
               2
       ) type_ratio
from incomes
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值