【sql】leetcode626. 换座位
小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。 其中纵列的 id 是连续递增的 小美想改变相邻俩学生的座位。 你能不能帮她写一个 SQL query 来输出小美想要的结果呢? 示例: +---------+---------+ | id | student | +---------+---------+ | 1 | Abbot | | 2 | Doris | | 3 | Emerson | | 4 | Green | | 5 | Jeames | +---------+---------+ 假如数据输入的是上表,则输出结果如下: +---------+---------+ | id | student | +---------+---------+ | 1 | Doris | | 2 | Abbot | | 3 | Green | | 4 | Emerson | | 5 | Jeames | +---------+---------+
一、改变id
select (case when mod(s.id,2)=1 and c.cou>s.id then s.id+1 when mod(s.id,2)=0 then s.id-1 else s.id end) as id,s.student from seat as s, (select count(*) as cou from seat) as c order by id
二、coalesce()函数 coalesce()函数:返回表达式中第一个非空表达式 位运算((s1.id + 1) ^ 1) - 1 :奇数- >奇数+1,偶数->偶数-1
select s1.id, COALESCE(s2.student, s1.student) AS student from seat s1 left join seat s2 on ((s1.id + 1) ^ 1) - 1 = s2.id order by s1.id;
三、lead()函数和lag()函数 lead()函数:取当前顺序的下N行记录 lag()函数:取当前顺序的上N行记录 decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
select id, decode(mod(id,2), 1, lead(student, 1, student) over(order by id), lag(student, 1) over(order by id)) as student from seat
下一篇:
【数据库学习】图数据库:neo4j