Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите написать SQL-запрос

Иван Сотников Ученик (95), открыт 2 недели назад
Дана таблица Students, где указана информация о том, где сидит каждый студент:
+----------+----------+
| seat | name |
+----------+----------+
Было принято решение поменять студентов, которые сидят рядом, местами. Напишите SELECT-запрос, который из исходной таблицы сформирует расположение студентов после пересадки.

Примечание. 1 меняется местом со 2, 3 с 4 и так далее. Если студентов нечетное количество, то последний студент не пересаживается, а остается на своем месте.

Столбцы в результате
seat - номер места студента (автоинкрементное поле, пропусков нет)
name - имя студента.

Помогите пожалуйста решить задачу
4 ответа
l ol Мыслитель (8297) 2 недели назад
Помочь или сделать за тебя?
S.H.I. Оракул (71422) 2 недели назад
 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;
Андрей Высший разум (475164) 2 недели назад
 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. Вот такого вот:
автоинкрементное поле, пропусков нет
в реальной жизни нет и быть не может. Если поле автоинкрементное, в нём неизбежно будут пропуски.
Похожие вопросы