SQL力扣
今天的题好多case then else end的
608-tree-node
https://leetcode.com/problems/tree-node/description/
树节点,流控制语句CASE,2025年6月13日 星期五
--
select id,casewhen p_id is null then 'Root'when Tree.id in (select p_id from Tree) then 'Inner'else 'Leaf'end as type
from Tree
错误的答案和原因
selectid,case when p_id is null then "Root"when id not in (select p_id from tree) then "Leaf"else "Inner"end as Type
fromtree
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日 星期五
select x, y, z,caseWHEN 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日 星期五
select max(t.num) AS num
from (select numfrom MyNumbersgroup by numhaving 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日 星期五
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日 星期五
-- 对于所有座位 id 是奇数的学生,修改其 id 为 id+1,如果最后一个座位 id 也是奇数,则最后一个座位 id 不修改。对于所有座位 id 是偶数的学生,修改其 id 为 id-1。
select (case when mod(id, 2) = 1 and counts != id then id + 1when mod(id, 2) = 1 and counts = id then idelse id-1end) as id,student
from seat,(select count(*) as counts from seat) as seat_counts
order by id asc