Используйте ORDER BY quantity DESC для убывания и ORDER BY quantity ASC для возрастания. Дополнительный id задаёт устойчивый порядок строк с одинаковым количеством.
SQL‑запрос: упорядочивание записей материалов по количеству
Используйте ORDER BY quantity DESC для убывания и ORDER BY quantity ASC для возрастания. Дополнительный id задаёт устойчивый порядок строк с одинаковым количеством.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеются две таблицы works и materials. Требуется написать SQL‑запрос, который выводит строки из таблицы materials, упорядочивая их по полю quantity: сначала в порядке убывания, затем – в порядке возрастания.
CREATE TABLE works
(
id BIGSERIAL PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE materials
(
id SERIAL PRIMARY KEY,
name VARCHAR(255),
quantity INTEGER,
work_id BIGINT,
FOREIGN KEY (work_id) REFERENCES works(id) ON DELETE CASCADE
);
INSERT INTO works(id, name)
VALUES (1, 'work 1'),
(2, 'work 2'),
(3, 'work 3');
INSERT INTO materials(id, name, quantity, work_id)
VALUES (1, 'mat 1', 10, 1),
(2, 'mat 2', 20, 2),
(3, 'mat 2', 15, 2),
(4, 'mat 4', 30, 2);
Ответ
Используйте ORDER BY quantity DESC для убывания и ORDER BY quantity ASC для возрастания. Дополнительный id задаёт устойчивый порядок строк с одинаковым количеством.
SELECT id, name, quantity, work_id
FROM materials
ORDER BY quantity DESC NULLS LAST, id ASC;
SELECT id, name, quantity, work_id
FROM materials
ORDER BY quantity ASC NULLS LAST, id ASC;
На исходных данных последовательности quantity будут 30, 20, 15, 10 и 10, 15, 20, 30. Это два альтернативных запроса, а не две сортировки одного результата одновременно. NULLS LAST явно определяет положение неизвестных значений; works здесь не требуется.