SQL力扣

今天的题好多case then else end的

608-tree-node

https://leetcode.com/problems/tree-node/description/

树节点,流控制语句CASE,2025年6月13日 星期五

sql 复制代码
-- 
select id,
       case
           when p_id is null then 'Root'
            when Tree.id in (select p_id from Tree) then 'Inner'
            else 'Leaf'
        end as type
from Tree

错误的答案和原因

sql 复制代码
select
    id,
    case when p_id is null then "Root"
         when id not in (select p_id from tree) then "Leaf"
         else "Inner"
    end as Type
from
    tree

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a != b. 在sql中, null是缺失未知值而不是空值(详情请见MySQL reference).

当你判断任意值a != null时, 官方说, "You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL", 任何与null值的对比都将返回null. 因此返回结果为否,这点可以用代码 select if(1 = null, 'true', 'false')证实.

从上述原理可见, 当询问 id not in (select p_id from tree)时, 因为p_id有null值, 返回结果全为false, 于是跳到else的结果, 返回值为inner. 所以在答案中,leaf结果从未彰显,全被inner取代.

610-triangle-judgement

https://leetcode.com/problems/triangle-judgement/

case then else,2025年6月13日 星期五

sql 复制代码
select x, y, z,
       case
           WHEN x + y > z AND x + z > y AND y + z > x THEN 'Yes'
           else 'No'
        end as 'triangle'
from Triangle

619-biggest-single-number

https://leetcode.com/problems/biggest-single-number/description/

单一数字 是在 MyNumbers 表中只出现一次的数字。

找出最大的 单一数字 。如果不存在 单一数字 ,则返回 null 。

只出现一次的最大数字,2025年6月13日 星期五

sql 复制代码
select max(t.num) AS num
from (
         select num
         from MyNumbers
         group by num
         having count(num) = 1
     ) t

620-not-boring-movies

https://leetcode.com/problems/not-boring-movies/description/

发现自己容易把SQL和Python混淆,这里的mod,写成了%2 == 1

mod(id, 2) = 1,2025年6月13日 星期五

sql 复制代码
select id, movie, description, rating
from cinema
where mod(id, 2) = 1 and description != 'boring'
order by rating desc

626-exchange-seats

https://leetcode.com/problems/exchange-seats/description/

交换位置,2025年6月13日 星期五

sql 复制代码
-- 对于所有座位 id 是奇数的学生,修改其 id 为 id+1,如果最后一个座位 id 也是奇数,则最后一个座位 id 不修改。对于所有座位 id 是偶数的学生,修改其 id 为 id-1。
select (case when mod(id, 2) = 1 and counts != id then id + 1
            when mod(id, 2) = 1 and counts = id then id
        else id-1
        end) as id,
       student
from seat,
     (select count(*) as counts from seat) as seat_counts
order by id asc
相关推荐
Elastic 中国社区官方博客1 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云1 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba1 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭2 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-2 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang2 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
longlongzihan2 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
geovindu3 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠3 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan4 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架