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