SQL学习(9):函数和条件-直接使用还是子查询
1.题目描述
Seat表包括id和student,现在要求从1开始交换连续两个学生的位次,如果最后一位学生位次为奇数则保持不变
2.问题分析
1.完整代码
select
(case when mod(id,1)=0 then id-1
when mod(id,1)=1 and id=(select count(*) from Seat) then id
else id+1) as id, student
from Seat
2.注意事项及知识点
函数作为条件成分时是能够直接使用还是需要子查询?
答案是:函数的使用都需要和from结合。from只能对应同层函数,无法跨层对应。
从理解层面来看,我们认知中的直接使用实际上形如 select * from Seat when count(*)=1
,此时只有一层,此处from对应count()函数,因此不需要子查询。
而当函数作为内层条件时,外层from只能作用于外层,内层需要再使用一层from。
比如
select
(case when
A=(select max(A) from tb) then 1
else 0 end) as case
from tb
此时case when内部的max不能对应外层from,需要再使用一个from