union all 关于order by ,添加序号,获取某个数据在序列中的位置

order by 数据库默认为sql结束,使用with..as 进行操作,序号使用函数row_number() over(ORDER BY s1.reward desc)

with s1 as
 (select s2.wechat_nickname,
         s2.wechat_photo,
         s1.premium,
         s1.reward,
         (select count(*)
           from (select sum(su.reward) reward,
                        st.shop_user_id shop_user_id,
                        count(st.shop_user_id) count,
                        sum(st.premium) premium
                   from SHOP_ACTIVITY_TRADE st,
                        (select sum(a.reward) reward, b.policyno
                           from SHOP_ACTIVITY_REWARD a, SHOP_ACTIVITY_TRADE b
                          where a.policyno = b.policyno
                          group by b.policyno
                          order by sum(a.reward) desc) su
                  where st.policyno = su.policyno
                  group by st.shop_user_id) s3
          where s3.reward >=
                (select sum(su.reward) reward
                   from SHOP_ACTIVITY_TRADE st,
                        (select sum(a.reward) reward, b.policyno
                           from SHOP_ACTIVITY_REWARD a, SHOP_ACTIVITY_TRADE b
                          where a.policyno = b.policyno
                            and b.shop_user_id = '980'
                          group by b.policyno
                          order by sum(a.reward) desc) su
                  where st.policyno = su.policyno
                  group by st.shop_user_id)) inde 
                  
                  from
                 (select sum(su.reward) reward,
                        st.shop_user_id shop_user_id,
                        count(st.shop_user_id) count,
                        sum(st.premium) premium
                   from SHOP_ACTIVITY_TRADE st,
                        (select sum(a.reward) reward, b.policyno
                           from SHOP_ACTIVITY_REWARD a, SHOP_ACTIVITY_TRADE b
                          where a.policyno = b.policyno
                            and b.shop_user_id = '980'
                          group by b.policyno
                          order by sum(a.reward) desc) su
                  where st.policyno = su.policyno
                  group by st.shop_user_id) s1, shop_activity_user s2
          where s1.shop_user_id = s2.shop_user_id
  ),
s2 as
 (
 select s2.wechat_nickname,
         s2.wechat_photo,
         s1.premium,
         s1.reward,
         row_number() over(ORDER BY s1.reward desc) inde
    from (select sum(su.reward) reward,
                 st.shop_user_id shop_user_id,
                 count(st.shop_user_id) count,
                 sum(st.premium) premium
            from SHOP_ACTIVITY_TRADE st,
                 (select sum(a.reward) reward, b.policyno
                    from SHOP_ACTIVITY_REWARD a, SHOP_ACTIVITY_TRADE b
                   where a.policyno = b.policyno
                   group by b.policyno) su
           where st.policyno = su.policyno 
           group by st.shop_user_id
           order by sum(su.reward) desc) s1,
         shop_activity_user s2
   where s1.shop_user_id = s2.shop_user_id
   order by s1.reward desc
   )

select *
  from s1
union all
select * from s2;

转载于:https://my.oschina.net/u/2400545/blog/795260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值