MySQL,按字母顺序排序,异常

时间:2011-11-18 20:46:39

标签: mysql

我有一个国家/地区列表,包含两个字段ID(int)和country_name。我需要编写一个查询,可以提取按字母顺序排列的国家/地区列表,但美国的记录位于顶部。我怎样才能做到这一点?假设美国的id记录= 100。

4 个答案:

答案 0 :(得分:6)

select * 
  from country
 order by case when id = 100 then 0 else 1 end, country_name

额外注意。

此解决方案与某些方面的其他建议不同

  • UNION方式。 UNION的默认行为是删除重复项,这可能是也可能不需要(Unions in MySQL)。除非id被索引,否则你将有两倍的执行时间
  • “选择一些东西并对其进行排序”很不错,但是返回额外的数据并且根据接收框架可能不需要这样做。

答案 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;

我没有对此进行测试,但理论上它应该可行。