首页 > 其他分享 >Hive 刷题——查询各品类销售商品的种类数及销量最高的商品

Hive 刷题——查询各品类销售商品的种类数及销量最高的商品

时间:2023-01-10 18:12:32浏览次数:49  
标签:category sku name Hive order si 数及 id 刷题

需求描述

从订单明细表(order_detail)统计各品类销售出的商品种类数及累积销量最好的商品,

需要用到的表

订单明细表:order_detail

order_detail_id
(订单明细id)
order_id
(订单id)
sku_id
(商品id)
create_date
(下单日期)
price
(商品单价)
sku_num
(商品件数)
1 1 1 2021-09-30 2000.00 2
2 1 3 2021-09-30 5000.00 5
22 10 4 2020-10-02 6000.00 1
23 10 5 2020-10-02 500.00 24
24 10 6 2020-10-02 2000.00 5

商品信息表:sku_info

sku_id
(商品id)
name
(商品名称)
category_id
(分类id)
from_date
(上架日期)
price
(商品价格)
1 xiaomi 10 1 2020-01-01 2000
6 洗碗机 2 2020-02-01 2000
9 自行车 3 2020-01-01 1000

商品分类信息表:category_info

category_id
(分类id)
category_name
(分类名称)
1 数码
2 厨卫
3 户外

解题思路

这个题目可用拆解为两个部分

  1. 取各品类下的商品数量
  2. 取各品类下销售最好的那一款商品

然后将两部分逻辑通过 品类ID进行关联一下就行了。

参考SQL

select t.category_id, t1.category_name, t1.sku_id, t1.name, order_num, sku_cnt
from (select category_id, category_name, sum(1) sku_cnt
      from (select si.category_id, category_name, od.sku_id
            from order_detail od
                     join sku_info si on od.sku_id = si.sku_id
                     join category_info ci on si.category_id = ci.category_id
            group by si.category_id, category_name, od.sku_id) t
      group by category_id, category_name) t
         join
     (select category_id, category_name, sku_id, name, order_num
      from (select category_id,
                   category_name,
                   sku_id,
                   name,
                   order_num,
                   rank() over (partition by category_id,category_name order by order_num desc) rk
            from (select si.category_id, od.sku_id, category_name, name, sum(sku_num) order_num
                  from order_detail od
                           join sku_info si on od.sku_id = si.sku_id
                           join category_info ci on si.category_id = ci.category_id
                  group by si.category_id, od.sku_id, category_name, name) t) t
      where rk = 1) t1 on t.category_id = t1.category_id
order by 1;

标签:category,sku,name,Hive,order,si,数及,id,刷题
From: https://www.cnblogs.com/wdh01/p/17008011.html

相关文章

  • 学习通考试刷题
    这里以火狐浏览器为例搜索插件tampermonkey第一个就是点击添加到firefox这时候页面右上角出现一个标志,左键点击---》获取新脚本向下翻找到输入osc第一个就是获取......
  • ctf命令执行刷题
    web29error_reporting(0);if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/flag/i",$c)){eval($c);}}else{highlight_fi......
  • 算法刷题 Day 13 | 239. 滑动窗口最大值 347.前 K 个高频元素
    今日内容:滑动窗口最大值前K个高频元素总结详细布置239.滑动窗口最大值(一刷至少需要理解思路)之前讲的都是栈的应用,这次该是队列的应用了。本题算比较......
  • C++ move()函数及priority_queue队列使用记录
    最近刷leetcode题,使用了move()函数及优先队列(堆)priority_queue数据结构,记录一下!1.move函数move(obj)函数的功能是把obj当做右值处理,可以应用在对象的移动上。右值引用......
  • 蓝桥杯 刷题统计
    题目描述小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六和周日每天做b道题目。请你帮小明计算,按照计划他将在第几天实现做题数......
  • 力扣刷题——day1
    1、两数之和一下就能想到暴力解法,就是一个两个遍历。classSolution{publicint[]twoSum(int[]nums,inttarget){int[]sum=newint[2];......
  • HIVE简单操作命令
    beelinebeeline>!connectjdbc:hive2://192.168.2.2:10000hdfs回车回车直接用默认表,不需要配置权限createtablest(idint,namestring)rowformatdelimitedfieldster......
  • 大数据面试杀招——Hive高频考点,就怕你都会!
       上一篇文章介绍了3道常见的SQL笔试题,反响还算是不错。于是乎,接下来的几天,菌哥将每天为大家分享一些关于大数据面试的杀招,祝小伙伴们都能早日找到合适的工作~一、什......
  • 【转载】ALTER SYSTEM SWITCH LOGFILE 意义与作用及与ALTER SYSTEM ARCHIVE LOG CURRE
    一、ALTERSYSTEM SWITCHLOGFILEClauseSWITCHLOGFILE子句允许您明确强制Oracle开始写入新的重做日志文件组,而不管当前重做日志文件组中的文件是否已满。当您强制......
  • [2185] LeetCode 刷题笔记: 统计包含给定前缀的字符串 [s]
    [2185]LeetCode刷题笔记:统计包含给定前缀的字符串[s]目录[2185]LeetCode刷题笔记:统计包含给定前缀的字符串[s]题目描述题解参考简单模拟复杂度分析参考题解C/C++......