当前位置: 首页 > article >正文

中级练习[10]:Hive SQL

目录

1. 各品类销量前三的所有商品

1.1 题目需求

1.2 代码实现

2. 各品类中商品价格的中位数

2.1 题目需求

2.2 代码实现

3. 找出销售额连续3天超过100的商品

3.1 题目需求

3.2 代码实现


 

1. 各品类销量前三的所有商品

1.1 题目需求

从订单详情表中(order_detail)和商品表(sku_info)中查询各个品类销售数量前三的商品。如果该品类小于三个商品,则输出所有的商品销量。

Sku_id(商品id)Category_id(品类id)
21
41
11
82
72
52
123
113
103

1.2 代码实现

hive>
select
  t2.sku_id,
  t2.category_id
from
  (
    select
      t1.sku_id,
      si.category_id,
      rank() over(partition by category_id order by t1.sku_sum desc) rk
    from
      (
        select 
          sku_id,
          sum(sku_num) sku_sum
        from
          order_detail
        group by
          sku_id
      )t1
    join
      sku_info si
    on
      t1.sku_id = si.sku_id
  )t2
where 
  t2.rk <= 3;

2. 各品类中商品价格的中位数

2.1 题目需求

从商品表(sku_info)中求出每个品类的价格中位数。如果是偶数则输出中间两个值的平均值,如果是奇数,则输出中间数即可。

Category_id(品类id)Medprice(中位数)
13500.0
21250.0
3510.0

2.2 代码实现

hive>
-- 求每个品类价格排序后的商品数量,并标记奇偶性
select
  sku_id,
  category_id,
  price,
  row_number() over(partition by category_id order by price desc) rk,
  count(*) over(partition by category_id) cn,
  count(*) over(partition by category_id) % 2 flag
from
  sku_info t1

-- 求出偶数品类的中位数
select
  distinct t1.category_id,
  avg(t1.price) over(partition by t1.category_id) medprice
from
  (
    select
      sku_id,
      category_id,
      price,
      row_number() over(partition by category_id order by price desc) rk,
      count(*) over(partition by category_id) cn,
      count(*) over(partition by category_id) % 2 flag
    from
      sku_info
  )t1
where 
  t1.flag = 0 and (t1.rk = cn / 2 or t1.rk = cn / 2 + 1)

-- 求出奇数品类的中位数
union all

select
  t1.category_id,
  t1.price
from
  (
    select
      sku_id,
      category_id,
      price,
      row_number() over(partition by category_id order by price desc) rk,
      count(*) over(partition by category_id) cn,
      count(*) over(partition by category_id) % 2 flag
    from
      sku_info
  )t1
where 
  t1.flag = 1 and t1.rk = round(cn / 2)

3. 找出销售额连续3天超过100的商品

3.1 题目需求

从订单详情表(order_detail)中找出销售额连续3天超过100的商品。

Sku_id(商品id)
1
10
11
12
2
3
4
5
6
7
8
9

3.2 代码实现

hive>
-- 每个商品每天的销售总额
select
  sku_id,
  create_date,
  sum(price * sku_num) sku_sum
from
  order_detail
group by
  sku_id, create_date
having 
  sku_sum >= 100

-- 判断连续三天以上
select
  distinct t3.sku_id
from
  (
    select
      t2.sku_id,
      count(*) over(partition by t2.sku_id, t2.date_drk) cdrk
    from
      (
        select
          t1.sku_id,
          t1.create_date,
          date_sub(t1.create_date, rank() over(partition by t1.sku_id order by t1.create_date)) date_drk
        from
          (
            select
              sku_id,
              create_date,
              sum(price * sku_num) sku_sum
            from
              order_detail
            group by
              sku_id, create_date
            having 
              sku_sum >= 100
          )t1
      )t2
  )t3
where
  t3.cdrk >= 3

http://www.kler.cn/news/307790.html

相关文章:

  • MySQL数据的增删改查(一)
  • 认识原码反码补码
  • 一文快速上手-create-vue脚手架
  • 2024年CAD图纸加密软件|加密图纸软件推荐:10款高效CAD加密软件
  • 苍穹外卖Day01
  • 技嘉RTX 4070 SUPER WUKONG OC显卡评测:天命人最佳2K游戏搭档 温度仅61℃
  • UE5-俯视角色移动(蓝图)01
  • 解密AI创作:提升Prompt提示词的提问技巧
  • 学习之git的远程仓库操作的常用命令
  • C++3D迷宫
  • GO 反射
  • CNSS Recruit 2024 Web方向 题解WriteUp
  • git编译安装报错
  • 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)
  • 计算机毕业设计 高校学术交流平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 借助大模型将文档转换为视频
  • html+css+js网页设计 旅游 厦门旅游网10个页面
  • element-plus的面包屑组件el-breadcrumb
  • 使用 SuperCraft AI 设计书橱模型的指南
  • 简单代码实现视频转图片_py
  • 在Flask中实现日志记录
  • 动态ip切换频率是快点好还是慢点好
  • Mybatis批量操作
  • Java 使用 Redis
  • 并发容器(Map、List、Set)实战及其原理分析
  • 如何快速清理Docker中的停止容器?
  • HFish开源蜜罐系统常见问题排查
  • 10- 【JavaWeb】Tomcat、Servlet基础
  • springboot后端开发-常见注解及其用途
  • C++ this指针