尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。
Posted 闭关苦炼内功
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。相关的知识,希望对你有一定的参考价值。
文章目录
1、题目需求
查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,
如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。
order_detail_id sku_num price sku_id create_date order_id
1 1 2 2000 1 2021/9/27 1
2 2 5 5000 3 2021/9/27 1
3 3 9 6000 4 2021/9/28 2
4 4 33 500 5 2021/9/28 2
5 5 37 100 7 2021/9/29 3
6 6 46 600 8 2021/9/29 3
7 7 12 1000 9 2021/9/29 3
8 8 43 20 12 2021/9/30 4
9 9 8 2000 1 2021/10/1 5
10 10 18 10 2 2021/10/1 5
11 11 6 5000 3 2021/10/1 5
12 12 8 6000 4 2021/10/1 6
13 13 1 2000 6 2021/10/1 6
14 14 17 100 7 2021/10/1 7
15 15 48 600 8 2021/10/1 7
16 16 45 1000 9 2021/10/1 7
17 17 48 100 10 2021/10/2 8
18 18 15 50 11 2021/10/2 8
19 19 31 20 12 2021/10/2 8
20 20 9 2000 1 2021/10/2 9
21 21 5800 10 2 2021/10/2 9
22 22 1 6000 4 2021/10/2 10
23 23 24 500 5 2021/10/2 10
24 24 5 2000 6 2021/10/2 10
25 25 39 600 8 2021/10/2 11
26 26 47 100 10 2021/10/3 12
27 27 19 50 11 2021/10/3 12
28 28 13000 20 12 2021/10/3 12
29 29 4 2000 1 2021/10/3 13
30 30 1 5000 3 2021/10/3 13
31 31 5 6000 4 2021/10/3 14
32 32 47 500 5 2021/10/3 14
33 33 8 2000 6 2021/10/3 14
34 34 20 100 7 2021/10/3 15
35 35 22 100 10 2021/10/3 16
36 36 42 50 11 2021/10/3 16
37 37 7400 20 12 2021/10/3 16
38 38 3 2000 1 2021/10/4 17
39 39 21 10 2 2021/10/4 17
40 40 8 6000 4 2021/10/4 18
41 41 28 500 5 2021/10/4 18
42 42 3 2000 6 2021/10/4 18
43 43 55 100 7 2021/10/4 19
44 44 11 600 8 2021/10/4 19
45 45 31 1000 9 2021/10/4 19
46 46 45 50 11 2021/10/4 20
47 47 27 20 12 2021/10/4 20
48 48 2 2000 1 2021/10/4 21
49 49 39 10 2 2021/10/4 21
50 50 1 5000 3 2021/10/4 21
51 51 8 6000 4 2021/10/5 22
52 52 20 500 5 2021/10/5 22
53 53 58 100 7 2021/10/5 23
54 54 18 600 8 2021/10/5 23
55 55 30 1000 9 2021/10/5 23
56 56 27 100 10 2021/10/5 24
57 57 28 50 11 2021/10/5 24
58 58 53 20 12 2021/10/5 24
59 59 5 2000 1 2021/10/5 25
60 60 35 10 2 2021/10/5 25
61 61 9 5000 3 2021/10/5 25
62 62 1 6000 4 2021/10/5 26
63 63 13 500 5 2021/10/5 26
64 64 1 2000 6 2021/10/5 26
65 65 30 100 7 2021/10/6 27
66 66 19 600 8 2021/10/6 27
67 67 33 1000 9 2021/10/6 27
68 68 37 100 10 2021/10/6 28
69 69 46 50 11 2021/10/6 28
70 70 45 20 12 2021/10/6 28
71 71 8 2000 1 2021/10/6 29
72 72 57 10 2 2021/10/6 29
73 73 8 5000 3 2021/10/6 29
74 74 3 6000 4 2021/10/6 30
75 75 33 500 5 2021/10/6 30
76 76 5 2000 6 2021/10/6 30
77 77 13 600 8 2021/10/7 31
78 78 43 1000 9 2021/10/7 31
79 79 24 100 10 2021/10/7 32
80 80 30 50 11 2021/10/7 32
81 81 8 2000 1 2021/10/7 33
82 82 48 10 2 2021/10/7 33
83 83 5 5000 3 2021/10/7 33
84 84 10 6000 4 2021/10/7 34
85 85 44 500 5 2021/10/7 34
86 86 3 2000 6 2021/10/7 34
87 87 25 600 8 2020/10/8 35
88 88 57 100 10 2020/10/8 36
89 89 44 50 11 2020/10/8 36
90 90 56 20 12 2020/10/8 36
91 91 2 2000 1 2020/10/8 37
92 92 26 10 2 2020/10/8 37
93 93 1 5000 3 2020/10/8 37
94 94 6 2000 6 2020/10/8 38
95 95 35 100 7 2020/10/8 39
96 96 34 600 8 2020/10/8 39
97 97 37 100 10 2020/10/8 40
98 98 51 50 11 2020/10/8 40
99 99 27 20 12 2020/10/8 40
2、分析:
考察开窗函数
2.1、ROW_NUMBER()使用
ROW_NUMBER()
从 1 开始,按照顺序,生成分组内记录的序列。
2.2、RANK 和 DENSE_RANK 使用
-
RANK()
生成数据项在分组中的排名,排名相等会在名次中留下空位 。 -
DENSE_RANK()
生成数据项在分组中的排名,排名相等会在名次中不会留下空位。
3、解答:
SELECT
NVL (sku_id, null) sku_id
FROM
(
SELECT
t1.sku_id,
t1.order_num,
--DENSE_RANK() OVER (
ROW_NUMBER() OVER (
ORDER BY
t1.order_num DESC
) rn
FROM
(
SELECT
od.sku_id,
sum(od.sku_num) order_num
FROM
order_detail od
GROUP BY
od.sku_id
) t1
) t2
WHERE
t2.rn = 2;
4、吐槽:
商大搞这个在线刷题,初衷阔以,就是代码区域太费劲(你一回车就知道了,贼恶心)
这一块编辑写着,用着很不爽
心脏病都快气出来了,强迫症上头真的,这点必须喷
给劳资整急了,直接拿 记事本 开干
我们下期见,拜拜!
以上是关于尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。的主要内容,如果未能解决你的问题,请参考以下文章