SQL每日一题(20201130)T1130B表Quantity的和,平均分给T1130A表的Type,不能存在小数,且平均数相加还要等于Quantity的和

SQL每日一题(20210727)
SQL每日一题(20211020)
SQL每日一题(20220412)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select id,
       type,
       case
           when row_number() over (partition by quantity order by quantity) = 1 then (sm - (cn - 1) * truncate((sm / cn),0))
           else truncate((sm / cn),0) end 平均
from (select ID, Type,  cn, Quantity,  sm
      from (select id, type, dense_rank() over (order by type) dk, count(id) over (partition by type) cn
            from t1130a
            group by type, id
            order by id) a
               left join (select quantity, dense_rank() over (order by quantity desc) dk, sum(quantity) sm
                          from t1130b
                          group by quantity) b on a.dk = b.dk
      order by id desc) a
order by id

在这里插入图片描述
在这里插入图片描述

select id,
       type,
       case
           when rm = max(rm) over (partition by type) then round(sub_quantity -
                                                                 sub_quantity / max(rm) over (partition by type) *
                                                                 (max(rm) over (partition by type) - 1), 0)
           else sub_quantity / max(rm) over (partition by type) end as av
from (select a.id,
             a.type,
             sum(quantity) over (partition by type)  as sub_quantity,
             row_number() over (partition by a.type) as rm
      from T1130A a
               left join T1130b b on a.id = b.id) c

在这里插入图片描述

select T1130A.id,
       T1130A.type,
       case
           when max(T1130A.id) over (PARTITION by type) = T1130A.ID
               then SUM(Quantity) over (PARTITION by type) -
                    (SUM(Quantity) over (PARTITION by type) / count(T1130A.id) over (PARTITION by type) *
                     (count(T1130A.id) over (PARTITION by type) - 1))
           else SUM(Quantity) over (PARTITION by type) / count(T1130A.id) over (PARTITION by type)
           end 平均
from T1130A
         left outer join T1130B on T1130A.id = T1130B.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

time丶sand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值