File tree Expand file tree Collapse file tree 3 files changed +100
-0
lines changed
solution/2300-2399/2388.Change Null Values in a Table to the Previous Value Expand file tree Collapse file tree 3 files changed +100
-0
lines changed Original file line number Diff line number Diff line change @@ -66,14 +66,56 @@ CoffeeShop 表:
66
66
67
67
<!-- 这里可写通用的实现逻辑 -->
68
68
69
+ ** 方法一:临时变量**
70
+
71
+ 我们可以使用一个临时变量 $cur$ 来记录上一个不为 $null$ 的值,如果当前值为 $null$,则将 $cur$ 的值赋给当前值,否则我们更新 $cur$ 的值为当前值。
72
+
73
+ ** 方法二:窗口函数**
74
+
75
+ 我们先用窗口函数 ` row_number() ` 为每一行生成一个序号,然后使用 ` sum() ` 窗口函数来生成一个分组序号,分组序号的生成规则为:如果当前行的值为 $null$,则分组序号与上一行相同,否则分组序号加一。最后我们使用 ` max() ` 窗口函数来获取每一组唯一一个不为 $null$ 的值。
76
+
69
77
<!-- tabs:start -->
70
78
71
79
### ** SQL**
72
80
73
81
<!-- 这里可写当前语言的特殊实现逻辑 -->
74
82
75
83
``` sql
84
+ # Write your MySQL query statement below
85
+ SELECT
86
+ id,
87
+ CASE
88
+ WHEN drink IS NOT NULL THEN @cur := drink
89
+ ELSE @cur
90
+ END AS drink
91
+ FROM CoffeeShop;
92
+ ```
76
93
94
+ ``` sql
95
+ # Write your MySQL query statement below
96
+ WITH
97
+ S AS (
98
+ SELECT * , row_number() OVER () AS rk
99
+ FROM CoffeeShop
100
+ ),
101
+ T AS (
102
+ SELECT
103
+ * ,
104
+ sum (
105
+ CASE
106
+ WHEN drink IS NULL THEN 0
107
+ ELSE 1
108
+ END
109
+ ) OVER (ORDER BY rk) AS gid
110
+ FROM S
111
+ )
112
+ SELECT
113
+ id,
114
+ max (drink) OVER (
115
+ PARTITION BY gid
116
+ ORDER BY rk
117
+ ) AS drink
118
+ FROM T;
77
119
```
78
120
79
121
<!-- tabs:end -->
Original file line number Diff line number Diff line change @@ -66,7 +66,41 @@ Note that the rows in the output are the same as in the input.
66
66
### ** SQL**
67
67
68
68
``` sql
69
+ # Write your MySQL query statement below
70
+ SELECT
71
+ id,
72
+ CASE
73
+ WHEN drink IS NOT NULL THEN @cur := drink
74
+ ELSE @cur
75
+ END AS drink
76
+ FROM CoffeeShop;
77
+ ```
69
78
79
+ ``` sql
80
+ # Write your MySQL query statement below
81
+ WITH
82
+ S AS (
83
+ SELECT * , row_number() OVER () AS rk
84
+ FROM CoffeeShop
85
+ ),
86
+ T AS (
87
+ SELECT
88
+ * ,
89
+ sum (
90
+ CASE
91
+ WHEN drink IS NULL THEN 0
92
+ ELSE 1
93
+ END
94
+ ) OVER (ORDER BY rk) AS gid
95
+ FROM S
96
+ )
97
+ SELECT
98
+ id,
99
+ max (drink) OVER (
100
+ PARTITION BY gid
101
+ ORDER BY rk
102
+ ) AS drink
103
+ FROM T;
70
104
```
71
105
72
106
<!-- tabs:end -->
Original file line number Diff line number Diff line change
1
+ # Write your MySQL query statement below
2
+ WITH
3
+ S AS (
4
+ SELECT * , row_number() OVER () AS rk
5
+ FROM CoffeeShop
6
+ ),
7
+ T AS (
8
+ SELECT
9
+ * ,
10
+ sum (
11
+ CASE
12
+ WHEN drink IS NULL THEN 0
13
+ ELSE 1
14
+ END
15
+ ) OVER (ORDER BY rk) AS gid
16
+ FROM S
17
+ )
18
+ SELECT
19
+ id,
20
+ max (drink) OVER (
21
+ PARTITION BY gid
22
+ ORDER BY rk
23
+ ) AS drink
24
+ FROM T;
You can’t perform that action at this time.
0 commit comments