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

力扣-换座位

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。

文章目录

  • 前言
  • 一、题目:626. 换座位
  • 二、解题
    • 1.正确示范①
      • 提交SQL
      • 运行结果
    • 2.正确示范②
      • 提交SQL
      • 运行结果
    • 3.正确示范③
      • 提交SQL
      • 运行结果
    • 4.正确示范④
      • 提交SQL
      • 运行结果
    • 5.其他
  • 总结


前言


一、题目:626. 换座位

表: Seat

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
Id是该表的主键列。
该表的每一行都表示学生的姓名和ID。
Id是一个连续的增量。

编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。

按 id 升序 返回结果表。

查询结果格式如下所示。

输入: 
Seat 表:
+----+---------+
| id | student |
+----+---------+
| 1  | Abbot   |
| 2  | Doris   |
| 3  | Emerson |
| 4  | Green   |
| 5  | Jeames  |
+----+---------+
输出: 
+----+---------+
| id | student |
+----+---------+
| 1  | Doris   |
| 2  | Abbot   |
| 3  | Green   |
| 4  | Emerson |
| 5  | Jeames  |
+----+---------+

解释:
请注意,如果学生人数为奇数,则不需要更换最后一名学生的座位。

二、解题

1.正确示范①

提交SQL

select 
case when id=num and mod(num,2)=1 then id
when mod(id,2)=0 then id-1 else id+1 end id,
student
from Seat u1,
(select count(1) num from Seat) u2
order by id;

运行结果

2.正确示范②

提交SQL

select 
case when id=num and mod(num,2)=1 then id
when mod(id,2)=0 then id-1 else id+1 end id,
student
from Seat u1,
(select max(id) num from Seat) u2
order by id;

运行结果

3.正确示范③

提交SQL

select 
case when id=num and mod(num,2)=1 then id
when mod(id,2)=0 then id-1 else id+1 end id,
student
from Seat u1,
(select id as num from Seat order by id desc limit 1) u2
order by id;

运行结果

4.正确示范④

提交SQL

select 
if(id=num and mod(num,2)=1,id,if(mod(id,2)=0,id-1,id+1)) id,
student
from Seat u1,
(select id as num from Seat order by id desc limit 1) u2
order by id;

运行结果

5.其他


总结

正确示范①思路:
先计算出总的座位数,
select count(1) num from Seat
当座位号是最后一个并且是奇数数,座位号不变,
当座位号是偶数时,把座位号-1,否则座位号+1
case when id=num and mod(num,2)=1 then id when mod(id,2)=0 then id-1 else id+1 end id
正确示范②思路:
先计算出总的座位数,因为题目说了座位号是连续增量,所以可以通过最大座位号来获取总座位数
select max(id) num from Seat
之后交换规则跟思路①一样;
正确示范③思路:
先计算出总的座位数,因为题目说了座位号是连续增量,所以可以按照座位号降序,取第一个来获取总座位数
select id as num from Seat order by id desc limit 1
之后交换规则跟思路①一样;
正确示范④思路:
把思路①中的case when用法转换为if语法
if(id=num and mod(num,2)=1,id,if(mod(id,2)=0,id-1,id+1)) id


http://www.lryc.cn/news/22075.html

相关文章:

  • DFT基本入门介绍
  • 做「增长」必须懂的6大关键指标
  • Linux:soft lockup 检测机制
  • 天线理论知识4——非频变天线
  • 基础架构组件选型及服务化
  • leetcode-每日一题-1247(中等,数学逻辑)
  • 前端面试题 —— 计算机网络(一)
  • 分布式-分布式缓存笔记
  • 【反序列化漏洞-01】为什么要序列化
  • 用c语言模拟实现常用字符串函数
  • 在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理
  • JavaWeb--Servlet
  • Linux启动过程
  • 面试资料整理——C++
  • 【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用
  • 皕杰报表斜线单元格、图表里或导出pdf的中文显示小方块解决方案
  • python读写hdfs文件的实用解决方案
  • RK3399+FPGA+MIPI 方案细节之subLVDS to MIPI处理
  • Vue组件是怎样挂载的
  • gcc: 编译选项:-fdelete-null-pointer-checks、-fno-delete-null-pointer-checks
  • 周赛334(前缀和、贪心+双指针、Dijkstra求最短路径、二分答案)
  • imx6ull——I2C驱动
  • Spring Cache的基本使用与分析
  • 【安全知识】——端口复用隐藏后门
  • Tina_Linux量产测试使用指南_new
  • STC32单片机 普通 I/O 口中断功能介绍和使用
  • 计算机学生如何找到第一份实习?
  • 《Python机器学习》基础代码
  • 【前端】JS异步加载
  • 【MySQL】SQL语言的五个部分