奕多多 2021-06-03 16:28 采纳率: 55.6%
浏览 68
已采纳

在线求大神查询出这句SQL语句

  • 写回答

2条回答 默认 最新

  • CSDN专家-文盲老顾 2021-06-03 18:14
    关注
    
    with t as (
    	select 1 as 产品ID,'A' as 产品名称,100 as 销售额
    	union all select 2,'B',300
    	union all select 3,'C',200
    	union all select 4,'D',400
    	union all select 5,'E',50
    	union all select 6,'F',500
    	union all select 7,'G',600
    ),t1 as (
        -- 获取当天总销售额
    	select SUM(销售额) as 总销售额 from t
    ),t2 as (
        -- 获得当天每个产品销售额占比,并倒序排序
    	select *,convert(decimal(8,2),销售额)/总销售额*100 as 销售占比
    		,ROW_NUMBER() over(order by convert(decimal(8,2),销售额)/总销售额*100 desc) as rid
    	from t,t1
    )
    select 产品ID,产品名称,销售额 
    from (
        -- 用销售额最高的项,累加销售占比,小于80的一组,大于等于80的一组
    	select *,row_number() over(partition by (case when 累计占比<80 then 0 else 1 end) order by 累计占比) as nid
    	from t2 a
    	cross apply(
    		select (
    			select SUM(销售占比)
    			from t2
    			where rid<=a.rid
    		) as 累计占比
    	) b
    ) a
    -- 筛选出累计占比小于80的,和大于等于80的第一项
    where 累计占比<80 or nid=1
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器