暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL脚本案例【12】查询销量高于所属品类平均数的商品

皮皮克克 2024-04-27
105

点击关注公众号,干货第一时间送达


本题需要计算平均数,

之前的文章出现过 "sum() over() ",也就是"开窗求和"

所以,聪明的你肯定预判到了,

我们将会用到 "avg() over()"

话不多说,走起!

【温馨提示:建表语句及数据导入脚本,可以翻看前面的文章:

SQL脚本案例【9】查询各品类销售商品的种类数、及销量最高的商品


一、需求场景

题目: 

从订单明细表order_detail中,查询销量高于所属品类平均销量的商品。

涉及到三张表,

订单明细表order_detail:

商品信息表sku_info:

品类信息表category_info:


正确结果:


二、解决方案

演示工具:Hive-3.1.3 + DataGrip2022


解题思路是:求出各个商品的销量,再通过join关联得到所属品类,

计算品类平均销量,最后筛选出符合条件的即可。


(1)分组计算每个商品的累积销量

select sku_id, sum(sku_num) as amt
from order_detail
group by sku_id

结果集:

(2)通过join,关联sku_info、category_info获取品类信息,并通过开窗平均计算,得出商品所属品类的平均销量

select t1.sku_id, t2.name, t2.category_id, t1.amt,
    avg(t1.amt) over (partition by t2.category_id) as avgAmt
from (
      select sku_id, sum(sku_num) as amt
      from order_detail
      group by sku_id
  )t1
      join sku_info t2
           on t1.sku_id=t2.sku_id
      join category_info t3
           on t2.category_id=t3.category_id


(3)筛选出销量大于平均销量的商品即可

select *
from (
   select t1.sku_id, t2.name, t2.category_id, t1.amt,
          avg(t1.amt) over (partition by t2.category_id) as avgAmt
   from (
            select sku_id, sum(sku_num) as amt
            from order_detail
            group by sku_id
        )t1
            join sku_info t2
                 on t1.sku_id=t2.sku_id
            join category_info t3
                 on t2.category_id=t3.category_id
)t4
where amt>avgAmt

结果集:



结束语:
Ok,就是本篇文章的全部内容了。
如果各位有不懂的地方,欢迎发消息给小编,小编会进行详细地解答。
最后,请屏幕前的各位吴彦祖和刘亦菲们,动动你们的小手,给小编一个

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论