Упорядочивание результатов на основе условия где

Предположим, что 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
Другие вопросы по тегам