LeetCode--2388. 将表中的空值更改为前一个值

文章目录

  • 1 题目描述
  • 2 测试用例
  • 3 解题思路

1 题目描述

表: CoffeeShop

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| drink       | varchar |
+-------------+---------+

id 是该表的主键(具有唯一值的列)。
该表中的每一行都显示了订单 id 和所点饮料的名称。一些饮料行为 null。

编写一个解决方案将 drink 的 null 值替换为前面最近一行不为 null 的 drink。保证表第一行的 drink 不为 null
返回 与输入顺序相同的 结果表。

2 测试用例

输入:

CoffeeShop 表:

+----+-------------------+
| id | drink             |
+----+-------------------+
| 9  | Rum and Coke      |
| 6  | null              |
| 7  | null              |
| 3  | St Germain Spritz |
| 1  | Orange Margarita  |
| 2  | null              |
+----+-------------------+

输出:

+----+-------------------+
| id | drink             |
+----+-------------------+
| 9  | Rum and Coke      |
| 6  | Rum and Coke      |
| 7  | Rum and Coke      |
| 3  | St Germain Spritz |
| 1  | Orange Margarita  |
| 2  | Orange Margarita  |
+----+-------------------+

解释:
对于 ID 6,之前不为空的值来自 ID 9。我们将 null 替换为 “Rum and Coke”。
对于 ID 7,之前不为空的值来自 ID 9。我们将 null 替换为 “Rum and Coke”。
对于 ID 2,之前不为空的值来自 ID 1。我们将 null 替换为 “Orange Margarita”。
请注意,输出中的行与输入中的行相同。

3 解题思路

  1. 使用 IFNULL 判断 drink 是否为 null,如果为 null 则赋值为 @pre_value 的值,使用自定义变量 @pre_value 存储最近一次非 null 的 drink
select id,  
       @pre_value := IFNULL(drink, @pre_value) as drink  
from CoffeeShop

执行结果

+--+-----------------+
|id|drink            |
+--+-----------------+
|9 |Rum and Coke     |
|6 |Rum and Coke     |
|7 |Rum and Coke     |
|3 |St Germain Spritz|
|1 |Orange Margarita |
|2 |Orange Margarita |
+--+-----------------+

你可能感兴趣的:(MySQL,LeetCode,leetcode,算法,mysql)