原题链接: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(商品件数) |
---|---|---|---|---|---|
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 |
解题思路
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