lulu_programmer 2022-10-11 23:54 采纳率: 75%
浏览 82
已结题

SQL窗口函数/多个子查询问题

题目描述

已知表格:
daily_sales:2021年每日销量表,
有date,shop_id,order_id三列
1)算出2021-12-01销量前3的shop_id、销量quantity、排名rank
2)求每shop_id达到全年销量80%的日期:shop_id、date_80p
3)求每天每shop_id的历史30天销量:date、shop_id、quantity_30d

我的代码

第一问:我是想先套一张表t1求出2021-12-01每个shop id下order id的数量,再套一张t2表用row number函数得到降序quantity排列的rank,再选取前三名

SELECT shop_id,
       quantity,
       rank
    from (
        SELECT shop_id,
               quantity,
               ROW_NUMBER()over(partition by shop_id order by quantity desc) rank
            from(
                SELECT date,
                       shop_id,
                       COUNT(order_id)quantity
                    from daily_sales
                    where date = '2021-12-01'
                    group by shop_id
            )t1
    )t2 
where rank <= 3  

第二问:我是想用t1求出每个shop id的总销量,再用t2求出每个shop id每日的销量,再用where过滤出日销量大于等于总销量的日期

select shop_id,
       date as date_80p
    from(
        select date,
               shop_id,
               order_id,
               count(order_id)daily_quantity,
               full_quantity
            from(
        select date,
               shop_id,
               order_id,
               count(order_id)full_quantity
            from daily_sales
            group by shop_id
            )t1
        group by date,shop_id
    )t2
where daily_quantity >= 0.8*full_quantity

第三问:我是用日期差得到所有日期大于前30天的date,并用groupby得到每日每shopid的销量,我总觉得这里逻辑好像有问题,希望可以得到帮助。

select date,
          shop_id,
          count(order_id) quantity_30d
     from daily_sales
     where date(date) > (
    select date_sub(max(date)),interval 30 day)
    from daily_sales)
    group by date, shop_id
我的疑问

我不知道自己的思路和代码是否正确,如有错误或者更高效的思路,恳请帮助和指出!非常感谢您!

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-10-12 08:14
    关注

    问题一,可以不用子查询。

          SELECT
             shop_id,
             COUNT(order_id) quantity,
             (@i:=@i+1) rank
             from daily_sales,(SELECT @i:=0) AS t
             where date = '2021-12-01'
             group by shop_id order by COUNT(order_id) desc limit 3
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 已采纳回答 10月12日
  • 创建了问题 10月11日

悬赏问题

  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题