根据where条件排序结果

时间:2016-02-08 19:16:41

标签: mysql sql postgresql where where-clause

假设contentScrim有3个属性:table1first_namelast_name。例如,使用以下元组:

country

我正在寻找有名字的人," John"或姓氏" Smith"或国家"美国":

John White Canada
John Smith France
Mary Smith Canada
Ben  Smith Canada
Mary Black USA    

我希望按以下顺序获得结果: 首先是姓名为John的人,然后是名字为smith的人,最后是那些有国家的人

我知道我可以编写以下3个不同的查询,然后按照我想要的顺序使用它们的输出:

SELECT *
FROM table1
WHERE
    first_name='John' or
    last_name='smith' or
    country='US'

我正在寻找更好的方法。

问题1:如果我使用上面提到的3个查询并找到他们的联盟,订单会改变,对吧?如果是,我如何追加结果?

问题2:有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

你的ORDER BY应该是

ORDER BY CASE
           WHEN FIRST_NAME = 'John' THEN 1
           WHEN LAST_NAME = 'smith' THEN 2
           ELSE 3
         END

答案 1 :(得分:1)

您可以在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