当前位置: 首页 > article >正文

炼码LintCode--数据库题库(级别:中等;数量:更新中~)--刷题笔记_03

目录

  • 炼码LintCode--数据库题库(级别:中等;数量:更新中~)--刷题笔记_03
    • 3617 · 更换连续两个人的座位(case when)
      • 题:
      • sql:
      • 解释:
    • 3615 · 数据中位数(窗口函数、floor、ceil 取整函数)
      • 题:
      • sql:
      • 解释:
    • 3612 · 指定日期的产品价格(coalesce 函数)
      • 题:
      • sql:
      • 解释:
    • 3611 · 我的最佳好友
      • 题:
      • sql:
      • 解释:
    • xxx
      • 题:
      • sql:
      • 解释:
    • xxx
      • 题:
      • sql:
      • 解释:
    • xxx
      • 题:
      • sql:
      • 解释:
    • xxx
      • 题:
      • sql:
      • 解释:
    • 未完待续~~~

炼码LintCode–数据库题库(级别:中等;数量:更新中~)–刷题笔记_03


炼码LintCode–数据库题库(级别:入门;数量:144道)–刷题笔记_01

炼码LintCode–数据库题库(级别:简单;数量:55道)–刷题笔记_02


持续更新~~

3617 · 更换连续两个人的座位(case when)

3617 · 更换连续两个人的座位

题:

在这里插入图片描述

sql:

select
(
    case 
        when id % 2 = 1 and id = (select count(*) from seat) then id
        when id % 2 = 1 then id + 1
        else id - 1
    end     
) as id , name
from seat
order by id;

解释:

-- 比如数据长这样:   id = 1 , name = a  ;
                --   id = 2 , name = b  ;
                --   id = 3 , name = c  ;
                --   id = 4 , name = d  ;
                --   ...
                --   id = 11 , name = k ;


--        id = 1 , 对应的 name = a,那么符合第二个when,id = 1 + 1 = 2 ,此时该条记录就变成 id = 2 , name = a;
--        id = 2 , 对应的 name = b , 那么符合else这个判断,id = 2 - 1 = 1   , 此时该条记录就变成 id = 1 , name = b
-- 此时,id = 1 和 id = 2 的数值就改变了,后面再根据 order by id 进行排序,就变成 id = 1 ,name = b;
                                                                        --  id = 2 , name = a;   这样就实现了位置的互换
                                                                        
-- 最后那条记录如果是偶数,那么就正常交换,如果是奇数,那么就符合第一个 when 的判断,id不做任何改变,也就是位置不进行交换。

select
(
    -- 这里的逻辑就是改变id的数值而已。
    case 
        -- 如果id是奇数且id=表的记录的,说明这个id是最后一条记录的id,因为是奇数,所以位置不需要改变,id不变。
        when id % 2 = 1 and id = (select count(*) from seat) then id
        -- 接下来的id就不是最后一条记录了,位置就得改变,如果 id 是奇数 ,那么 id + 1 
        when id % 2 = 1 then id + 1
        -- 否则,偶数的id - 1 变成奇数,而且是上一条记录的数据的id
        else id - 1
    end     
) as id , name

from seat

order by id;

3615 · 数据中位数(窗口函数、floor、ceil 取整函数)

3615 · 数据中位数

题:

在这里插入图片描述

sql:

select avg(num) median
from (
    select 
        num ,
        row_number() over(order by num) as 'row_num', 
        count(*) over () as 'total_rows'
    from Number
) subquery
where row_num in (  
    floor( (total_rows + 1) / 2 ), ceil( (total_rows + 1) / 2 )
);
 

解释:

就是先把数据排序,然后给每个数据一个编号,然后再用总条数去+1除2得出中间数。
总条数是偶数,+1再除2,得出中间两个数,再算平均值,得出的就是中位数;
总条数是奇数,+1再除2,得出的就是两个一样的数值,取平均数,得出的就是中位数。

-- floor 和 ceil 是两个常见的数学函数,它们分别用来处理数字的取整


-- avg 是求平均数,也就是求符合条件的中位数
select avg(num) median
from (
    select 
        num ,
        -- 先给 num 降序排序,然后再给每个数值一个编号
        row_number() over(order by num) as 'row_num', 
        -- 这里是统计表中有几条数据,用这个窗口函数,可以每一行都显示表总条数,而且不需要和group by 搭配
        -- 使用窗口函数时,可以返回每一行对应的总行数,而不需要对结果进行聚合。
        count(*) over () as 'total_rows'
    from Number
) subquery
where row_num in (  
    -- floor(x):返回小于或等于 x 的最大整数,即向下取整。 floor(3.5)  = 3 ;
    -- ceil(x):返回大于或等于 x 的最小整数,即向上取整。  ceil(3.5) = 4 ;
    floor( (total_rows + 1) / 2 ), ceil( (total_rows + 1) / 2 )
);
 

3612 · 指定日期的产品价格(coalesce 函数)

3612 · 指定日期的产品价格

题:

在这里插入图片描述

sql:


SELECT 
    p.id,
    COALESCE(
        (SELECT new_price
         FROM Products 
         WHERE id = p.id AND updated_date <= '2023-05-15'
         ORDER BY updated_date DESC
         LIMIT 1), 99) AS price
FROM 
    (SELECT DISTINCT id FROM Products) p;

解释:

-- coalesce 函数:
-- 语法: COALESCE(expression1, expression2, ..., expressionN)
-- expression1, expression2, ..., expressionN 是一个或多个表达式(列、常量、计算结果等)。
-- COALESCE 会从左到右依次检查这些表达式或值,返回第一个 非 NULL 的值。如果所有的表达式都是 NULL,它会返回 NULL。
-- 值都为null时,也可以返回我们指定的数据


SELECT 
    p.id,
    -- COALESCE 函数用于确保当子查询没有返回任何结果(即该产品在 2023-05-15 前没有任何修改记录)时,返回默认价格 99
    COALESCE(
        (SELECT new_price
         FROM Products 
         WHERE id = p.id AND updated_date <= '2023-05-15'
         -- 最新时间--用于获取最新修改的记录
         ORDER BY updated_date DESC
         LIMIT 1), 99) AS price
FROM 
    -- 先进行去重,得到所有的商品 id
    (SELECT DISTINCT id FROM Products) p;

3611 · 我的最佳好友

3611 · 我的最佳好友

题:

sql:

解释:


xxx

题:

sql:

解释:


xxx

题:

sql:

解释:


xxx

题:

sql:

解释:


xxx

题:

sql:

解释:


未完待续~~~


http://www.kler.cn/a/401446.html

相关文章:

  • 移门缓冲支架的工作原理
  • 生成式语言模型 三范式 预训练、微调、强化反馈学习
  • AI工具百宝箱|任意选择与Chatgpt、gemini、Claude等主流模型聊天的Anychat,等你来体验!
  • 区块链中的wasm合约是什么?
  • 讯飞、阿里云、腾讯云:Android 语音合成服务对比选择
  • 力扣-Mysql-3322- 英超积分榜排名 III(中等)
  • 【Three.js基础学习】26. Animated galaxy
  • Dubbo源码解析-服务导出(四)
  • chatGPT是如何使用tensrFlow训练模型的?
  • 【数据分享】1981-2024年我国逐日最低气温栅格数据(免费获取)
  • CSS3中的弹性布局之侧轴的对齐方式
  • 梧桐数据库深入探索递归查询的强大功能
  • Excel——宏教程(精简版)
  • EMall实践DDD模拟电商系统总结
  • 学习整理在php中一个二维数组按另一个一维数组顺序排序
  • 【OpenCV】Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
  • C++ 对函数的详细记录 【雨露均沾】
  • 【UGUI】Unity 游戏开发:背包系统初始化克隆道具
  • CFD 应用于分离过程:旋风分离器(第 2 部分)
  • 服务器上Cuda+Pytorch兼容性的那些问题
  • 鸿蒙学习生态应用开发能力全景图-鸿蒙开发套件(2)续集 OS 开放能力集
  • 跨平台WPF框架Avalonia教程 二
  • Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找
  • 【leetcode 02】27. 移除元素
  • Three.js PBR材质
  • iOS无人直播虚拟视频实用版