Упорядочивание результатов на основе условия где
Предположим, что table1
имеет 3 атрибута: first_name
, last_name
, а также country
, Например, со следующими кортежами:
John White Canada
John Smith France
Mary Smith Canada
Ben Smith Canada
Mary Black USA
Я ищу людей с именем "Джон" или фамилией "Смит" или страной "США":
SELECT *
FROM table1
WHERE
first_name='John' or
last_name='smith' or
country='US'
Я хочу получить результат в следующем порядке: сначала те, у кого есть имя, Джон, затем те, у кого фамилия Смит, и, наконец, те, что в стране США.
Я знаю, что могу написать следующие 3 разных запроса и затем использовать их вывод в нужном мне порядке:
SELECT *
FROM table1
WHERE first_name='John'
SELECT *
FROM table1
WHERE last_name='smith'
SELECT *
FROM table1
WHERE country='US'
Я ищу лучший путь.
Вопрос 1: если я использую упомянутые 3 запроса и найду их объединение, порядок изменится, верно? Если да, как я могу добавить результаты?
Вопрос2: есть ли лучший способ?
2 ответа
Ваш ORDER BY должен быть что-то вроде
ORDER BY CASE
WHEN FIRST_NAME = 'John' THEN 1
WHEN LAST_NAME = 'smith' THEN 2
ELSE 3
END
Вы можете использовать CASE
утверждение в вашем ORDER BY
оговорка, вот так:
SELECT -- We NEVER use SELECT *
first_name,
last_name,
country
FROM
Table1
WHERE
first_name = 'John' OR
last_name = 'Smith' OR
country = 'US'
ORDER BY
CASE WHEN first_name = 'John' THEN 0 ELSE 1 END,
CASE WHEN last_name = 'Smith' THEN 0 ELSE 1 END,
CASE WHEN country = 'US' THEN 0 ELSE 1 END