Помогите написать SQL-запрос
Дана таблица Students, где указана информация о том, где сидит каждый студент:
+----------+----------+
| seat | name |
+----------+----------+
Было принято решение поменять студентов, которые сидят рядом, местами. Напишите SELECT-запрос, который из исходной таблицы сформирует расположение студентов после пересадки.
Примечание. 1 меняется местом со 2, 3 с 4 и так далее. Если студентов нечетное количество, то последний студент не пересаживается, а остается на своем месте.
Столбцы в результате
seat - номер места студента (автоинкрементное поле, пропусков нет)
name - имя студента.
Помогите пожалуйста решить задачу
Помочь или сделать за тебя?
Какая версия базы данных?
SELECT
IFNULL(s2.seat, s1.seat) AS seat,
s1.name
FROM Students AS s1
LEFT JOIN Students AS s2
ON s2.seat = s1.seat - 1 + 2 * MOD(s1.seat, 2)
В тексте задачи не сказано, что результат запроса должен быть отсортирован.
Во многих диалектах SQL вместо MOD(s1.seat, 2) можно написать s1.seat % 2
P.S. Вот такого вот:
автоинкрементное поле, пропусков нет
в реальной жизни нет и быть не может. Если поле автоинкрементное, в нём неизбежно будут пропуски.
SELECT s.seat,
CASE
WHEN MOD(s.seat, 2) = 1 THEN COALESCE(s2.name, s.name)
ELSE s2.name
END AS name
FROM Students s
LEFT JOIN Students s2
ON ( (MOD(s.seat, 2) = 1 AND s2.seat = s.seat + 1)
OR (MOD(s.seat, 2) = 0 AND s2.seat = s.seat - 1) )
ORDER BY s.seat;