LeetCode - 626. Cambiar asientos

Xiaomei es profesora de tecnología de la información en una escuela secundaria, tiene un asientoLa tabla de asientos se usa generalmente para almacenar los nombres de los estudiantes y sus correspondientes identificadores de asientos .

La identificación de la columna aumenta continuamente

Xiaomei quiere cambiar los asientos de dos estudiantes adyacentes.

¿Puedes ayudarla a escribir una consulta SQL para generar el resultado que desea Xiaomei?

Inserte la descripción de la imagen aquí

Create table If Not Exists seat(id int, studentvarchar(255));
Truncate table seat;
insert into seat (id, student) values ('1','Abbot');
insert into seat (id, student) values ('2','Doris');
insert into seat (id, student) values ('3','Emerson');
insert into seat (id, student) values ('4','Green');
insert into seat (id, student) values ('5','Jeames');

Método 1: de acuerdo con los requisitos del tema, divida todos los datos, intercambie 1, 2, intercambie 3, 4, el último es impar, y luego divídalo en tres bloques para escribir, el primer bloque es el id es par Sí, id-1 es equivalente a intercambiar con números impares, el segundo bloque es la identificación de números impares, id + 1 es equivalente a intercambiar con números pares, el último bloque es el último con números impares, no cambie, entonces Las tres piezas se fusionan y ordenan para obtener el resultado.

select s.id , s.student from
(
select id-1 as id ,student from seat wheremod(id,2)=0
union
select id+1 as id,student from seat wheremod(id,2)=1 and id !=(select count(*) from seat)
union
select id,student from seat where mod(id,2)=1and id = (select count(*) from seat)
) s order by id;

Método 2: este método es una expansión y simplificación del método anterior, con ideas y diferencias similares

De acuerdo con la tabla anterior y los resultados de la consulta, cuando la identificación original es impar, la identificación después del intercambio de asientos se convierte en id + 1, cuando la identificación original es par, la identificación después del intercambio de asientos se convierte en id-1, otro aspecto Lo que hay que tener en cuenta es que cuando el número de alumnos es impar, el id del último alumno sigue siendo el mismo, por lo que se debe utilizar una subconsulta para determinar el número de alumnos y luego se pueden discutir por separado.

select (
 case when mod(id,2)!=0 and id!=counts then id+1
      when mod(id,2)!=0 and id=counts then id
      else id-1 end)as id,student
from seat,(select count(*)as counts from seat)as seat_counts
order by id;

Método tres:

select 
	(
		CASE WHEN s.id % 2 = 0 THEN s.id - 1 
		WHEN s.id % 2 != 0 AND s.id = counts 
		THEN s.id
		ELSE s.id + 1 END
	) AS id,
	student
from seat s,
	(
		SELECT count(*) AS counts FROM seat
	) AS students_counts
ORDER BY id;

Supongo que te gusta

Origin blog.csdn.net/qq_42363032/article/details/108909930
Recomendado
Clasificación