SQL编程题 数据库开发工程师



阿里几乎所有的订单系统的排名都会参考成交量(交易成功)这个指标,因此很多卖家为了使自己的排名靠前,不惜利用刷单行为来提高自己的排名(即虚假成交),
如果现在发现虚假刷单的特征其中一点:即低vip_level,买家的vip_level<=2,且买家注册时间和订单下单时间很近(如5天内)。
给出下面3张表,
卖家表 sellers (seller_id, create_time, vip_level),其中seller_id是买家用户id, create_time是注册时间,vip_level是用户等级,等级越高则说明成交数越多。
买家表 buyers (buyer_id, create_time, vip_level),其中buyer_id是买家用户id, create_time是注册时间,vip_level是用户等级,等级越高则说明成交数越多。
订单表 orders (order_id,buyer_id, seller_id,create_time, pay_time, success_time, product_id, price) 订单id, 买家id,卖家id, 创建时间,支付时间,交易完成时间,商品id,
商品价格。
1)  你能否找到满足以上特征,创建订单在20150201当天存在刷单嫌疑的买家和卖家吗(提供sql语句)?
2)  请用一个SQL语句,统计出20150201当天付款金额最高的买家用户id、付款笔数最多的买家用户id
3)  用一段SQL分析下20150201当天成交额最高的卖家,在之前一个月和之后一个月每天成交额情况。以买家付款时间作为成交时间。


这个题目折腾了死我了, 虽然有了思路但是  还是折腾我3 个小时。  思路就不写了, 感觉最后一张表 有问题的,貌似订单中只能有一个商品, 但实际中的确不只是一个商品的。

估计出题目的人 折腾我们吧, 题目的意思是 几条记录就几个商品。   总结写结果  以后自己多看看


1  select  buyer_id,  seller_id  from orders o where  success_time='20150201'
 exits ( select 1 from buyers s  create_time <= '20150201' and create_time>='20150125' and vip_level<=2  and  s.buyer_id = o.buyer_id);     按照题目意思写的 就算有问题 问题也不太,  效率上面需要考虑的, 实在不行 用hints 强制走 hash  连接


2    就是这个题目折腾人! 

   select max(total), max(cnt),
     max(buyer_id) keep(dense_rank first order by total desc), --- 成交额 最多
     max(buyer_id) keep(dense_rank first order by cnt desc) -- 成交的数量最多
    from(
      select count(1), product_id, price, buyer_id,
      sum( count(1)*price ) over(partition by buyer_id) total,  ----  成交的金额
      sum(count(1)) over(partition by buyer_id) cnt  ----  成交的数量
      from   orders   -- where success_time='20150201'
       group by   product_id, price, buyer_id  
     );   测试通过.........


3  第三个简单写写

with tab1 as(  ---  计算出 当天谁最多
        select count(1) cnt, product_id, price, buyer_id, sum( count(1)*price ) over(partition by buyer_id) total  ----  成交的金额  
       from   orders  where create_time='20150201'  group by   product_id, price, buyer_id
    ) select buyer_id from tab1 where cnt*price = total

   
   select sum(cnt*price), time   from (
     select  count(*) cnt,  product_id, price, substr(create_time, 1,8 ) time  from  orders where  (pay_time like '201503%' or pay_time like '201501%')  group by  substr(create_time, 1,8 ) , product_id, price
   ) group by  time   
  
     需要把 第一步的 结果放入到  第二步中当条件

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值