如何创建一个网站链接,视频广告联盟平台,公司简介ppt内容,市场调研大赛力扣题
1、题目地址
2388. 将表中的空值更改为前一个值
2、模拟表
表#xff1a;CoffeeShop
Column NameTypeidintdrinkvarchar
id 是该表的主键#xff08;具有唯一值的列#xff09;。该表中的每一行都显示了订单 id 和所点饮料的名称。一些饮料行为 null。
3、要求…力扣题
1、题目地址
2388. 将表中的空值更改为前一个值
2、模拟表
表CoffeeShop
Column NameTypeidintdrinkvarchar
id 是该表的主键具有唯一值的列。该表中的每一行都显示了订单 id 和所点饮料的名称。一些饮料行为 null。
3、要求
编写一个解决方案将 drink 的 null 值替换为前面最近一行不为 null 的 drink。保证表第一行的 drink 不为 null。
返回 与输入顺序相同的 结果表。
查询结果格式示例如下。
示例 1
输入
CoffeeShop 表
iddrink9Rum and Coke6null7null3St Germain Spritz1Orange Margarita2null
输出
iddrink9Rum and Coke6Rum and Coke7Rum and Coke3St Germain Spritz1Orange Margarita2Orange Margarita
解释
对于 ID 6之前不为空的值来自 ID 9。我们将 null 替换为 “Rum and Coke”。 对于 ID 7之前不为空的值来自 ID 9。我们将 null 替换为 “Rum and Coke”。 对于 ID 2之前不为空的值来自 ID 1。我们将 null 替换为 “Orange Margarita”。 请注意输出中的行与输入中的行相同。
4、代码编写
我的写法
思路首先要求里面的输出顺序还是和原先一样原先并没有按什么排序所以我们得先对数据标上序号这就可以用到窗口函数 row_numer然后我们只需要在查询到 null 数据的时候去查询比这个 null 数据的序号小的不为 null 的数据然后根据序号倒序取第一条即可就能满足要求
里面需要注意的一点就是窗口函数 ROW_NUMBER() over()over 括号里面是不加分组和排序的
WITH tmp AS (SELECT *, ROW_NUMBER() over() AS rnFROM CoffeeShop
)
SELECT id, IFNULL(drink, (SELECT drink FROM tmp WHERE rn one.rn AND drink IS NOT NULL ORDER BY rn DESC LIMIT 1)) AS drink
FROM tmp AS one知识点
临时变量有两种用法(temp 可以改成其他名) 1、使用 set定义形式 set temp[var]
SET temp10;
SELECT temp;2、使用 select定义形式 select temp:[var]下面两种都可以输出
SELECT temp:10;SELECT temp:10;
SELECT temp;参考mysql 临时变量
网友写法临时变量用法
SELECT id,temp : IFNULL(drink, temp) drink
FROM CoffeeShop上面网友写法就是用的第二种用法代码分析如下
第 1 行IFNULL 不为 null将 Rum and Coke 赋值到 temp 里面并输出 SELECT temp: drink(drinkRum and Coke) 第 2 行IFNULL 为 null将 temp 赋值到 temp 里面并输出 SELECT temp:temp(tempRum and Coke 第 3 行IFNULL 为 null将 temp 赋值到 temp 里面并输出 SELECT temp:temp(tempRum and Coke 第 4 行IFNULL 不为 null将 St Germain Spritz 赋值到 temp 里面并输出 SELECT temp: drink(drinkSt Germain Spritz) 第 5 行IFNULL 不为 null将 Orange Margarita 赋值到 temp 里面并输出 SELECT temp: drink(drinkOrange Margarita) 第 6 行IFNULL 为 null将 temp 赋值到 temp 里面并输出 SELECT temp:temp(tempOrange Margarita
iddrink9Rum and Coke - temp6null - temp7null - temp3St Germain Spritz - temp1Orange Margarita - temp2null - temp