我有一个国家/地区列表,包含两个字段ID(int)和country_name。我需要编写一个查询,可以提取按字母顺序排列的国家/地区列表,但美国的记录位于顶部。我怎样才能做到这一点?假设美国的id记录= 100。
答案 0 :(得分:6)
select *
from country
order by case when id = 100 then 0 else 1 end, country_name
额外注意。
此解决方案与某些方面的其他建议不同
答案 1 :(得分:1)
select (case when id = 100 then 1 else 0) presort, country_name from countries order by presort desc, country_name asc
选择一个标志别名presort,对于id = 100为1,对于其他所有为0。然后按选定的行降序排序,首先输入id = 100,然后在presort为0时按country_name升序排序,这是所有其他ID的情况。
答案 2 :(得分:0)
(SELECT *
FROM countries
WHERE id = 100)
UNION
(SELECT *
FROM countries
WHERE id != 100
ORDER BY country_name)
不一定是最好的方法。在使用它时,我更喜欢在美国顶层硬编码,在各种模型层中。
答案 3 :(得分:0)
使用union执行两个单独的查询。
select id, country_name from table where id=100
union
select id, country_name from table where id!=100 order by country_name desc;
我没有对此进行测试,但理论上它应该可行。