尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。

Posted 闭关苦炼内功

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。相关的知识,希望对你有一定的参考价值。

尚大HQL-1


文章目录


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,如果存在多个排名第二的商品则需要全部返回。的主要内容,如果未能解决你的问题,请参考以下文章

17_高级映射:一对一查询(使用resultType)

MyBatis总结之高级映射一对多查询

access 不能建立删除查询。

MyBatis高级映射查询

mybatis学习笔记(11)-一对多查询

Mybatis学习记录----Mybatis的高级映射