大数据SQL题24 根据商品销售情况进行商品分类

原题链接:http://practice.atguigu.cn/#/question/24/desc?qType=SQL

题目需求

从订单详情表中(order_detail)对销售件数对商品进行分类,0-5000为冷门商品,5001-19999位一般商品,20000往上为热门商品,并求出不同类别商品的数量

期望结果如下:

category(类型)cn(数量)
一般商品1
冷门商品10
热门商品1

需要用到的表:

订单明细表:order_detail

order_detail_id(订单明细id)order_id(订单id)sku_id(商品id)create_date(下单日期)price(商品单价)sku_num(商品件数)
1112021-09-302000.002
2132021-09-305000.005
221042020-10-026000.001
231052020-10-02500.0024
241062020-10-022000.005

解题思路

SELECT  CASE WHEN sku_num BETWEEN 0 AND 5000 THEN '冷门商品'
             WHEN sku_num BETWEEN 5001 AND 19999 THEN '一般商品'
             WHEN sku_num >= 20000 THEN '热门商品' END AS category,
        COUNT(DISTINCT sku_id)                     AS cn
FROM
(
	SELECT  sku_id,
	        SUM(sku_num) AS sku_num
	FROM order_detail
	GROUP BY  sku_id
) t1
GROUP BY  CASE WHEN sku_num BETWEEN 0 AND 5000 THEN '冷门商品'
             WHEN sku_num BETWEEN 5001 AND 19999 THEN '一般商品'
             WHEN sku_num >= 20000 THEN '热门商品' END
一、实验目的 1、掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言查询语句的理解。 2、熟练掌握数据查询中的分组、统计、计算与集合查询方法。 二、实验环境: Microsoft Windows 2000操作系统,Microsoft SQL Server 2000数据库管理系统标准版或企业版。 三、实验内容、步骤、结果和实验过程中出现的问: 1>内容: 基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB)中,用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书中与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集; 2、统计查询实验 在“图书读者数据库”(Book_Reader_DB)中,用分组、统计与计算的方法完成下列查询任务: ① 查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍; ② 求机械工业出版社出版的各类图书的平均定价,用Group by来实现; ③ 列出计算机类图书的书号、名称及价格,最后求出册数和总价格; ④ 列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格; ⑤ 查询订购图书最多的出版社及订购图书的数量; ⑥ 查询2000年以后购买的图书总册数; ⑦ 计算各类图书的总册数; ⑧ 查询每本图书的平均借阅次数;
### 大数据开发 HiveSQL 笔试目及答案 #### 目 1: 自连接实现 自连接是一种特殊的连接方式,表与其自身进行连接。这通常用于查找具有层次结构的数据。 ```sql SELECT e.employee_id, m.manager_name FROM employees AS e JOIN employees AS m ON e.manager_id = m.employee_id; ``` 此查询展示了如何通过员工表找到每位员工对应的经理名称[^1]。 #### 目 2: 窗口分析函数实现 窗口函数允许执行聚合计算而不减少输入行的数量。下面的例子展示了一个典型的排名场景: ```sql SELECT employee_id, salary, DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank FROM salaries; ``` 这段代码按部门分区并根据薪水降序排列来分配密集等级。 #### 目 3: Top N 查询 为了获取每个类别的前几名记录,可以使用窗口函数配合 `LIMIT` 或者子查询的方法: ```sql WITH RankedSales AS ( SELECT product_category, sales_amount, ROW_NUMBER() OVER(PARTITION BY product_category ORDER BY sales_amount DESC) rn FROM sales_data ) SELECT * FROM RankedSales WHERE rn <= 5; -- 获取每种类目的前五名销售量商品 ``` 这里利用了CTE(公用表表达式)以及ROW_NUMBER窗口函数实现了分类下的top n选取. #### 目 4: 使用 CONCAT 和 CONCAT_WS 函数 这两个字符串拼接函数的区别在于后者可以在多个参数间加入指定分隔符。 ```sql -- 单纯地把两列内容连在一起 SELECT concat(firstname,' ',lastname) full_name FROM users; -- 加入逗号作为分隔符链接多列 SELECT concat_ws(',', firstname, lastname, email) info_string FROM users; ``` 上述例子分别演示了两种不同情况下应该如何选用合适的字符串组合方法[^3]. #### 目 5: LOAD DATA 命令语法 当需要加载外部文件到Hive表时,可采用如下命令格式: ```sql LOAD DATA LOCAL INPATH '/path/to/local/file' INTO TABLE my_table; ``` 这条语句指定了本地路径中的文件被导入至名为my_table的目标表格中[^4]. #### 目 6: WHERE vs HAVING 的区别 理解两者之间的差异对于写出高效的查询至关重要。WHERE适用于过滤单条记录;而HAVING则针对已经完成GROUP BY操作后的结果集做进一步筛选。 ```sql -- 正确用法示范 SELECT region, COUNT(*) num_stores FROM stores WHERE open_date >= '2020-01-01' GROUP BY region HAVING COUNT(*) > 10; ``` 该片段说明了何时应该应用WHERE条件而非HAVING来进行初步的数据裁剪[^5].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值