上面出现的默认选项的SQL顺序

时间:2015-02-17 06:06:48

标签: mysql sql

如果我想按升序显示名称列表,除了一些默认值,我怎么能用SQL order by子句实现这个。

例如结果:

place
-------
United States
United Kingdom
Bahrain
Australia
Fiji 
Indonesia
Japan
Korea
....

如果美国,英国和巴林是某些默认值,我们希望在数据库的常规升序列表之前出现 - 所有这些(包括默认值都是从数据库中提取而不是硬编码)。默认值应按照上面定义的顺序(不是asc或desc)

由于

3 个答案:

答案 0 :(得分:2)

试试这个。我在查询中使用ORDER BY语句使用条件CASE

SELECT 
      place 
FROM #yourtable 
ORDER BY 
(CASE WHEN place='United States' THEN '1'
      WHEN place='United Kingdom' THEN '2'
      WHEN place='Bahrain' THEN '3'
      ELSE place
 END)

答案 1 :(得分:2)

我认为正确的方法是在表default_seq int中添加一列。对于非默认列,将其设置为0,对于默认列,将其设置为正值,最高编号为首先出现的值。

然后查询变为:

select place
from your_table
order by default_seq desc, place asc

这样做的好处是可以在不更改任何代码的情况下更改默认值。

答案 2 :(得分:0)

要创建所需的结果,您可以使用UNION,如下所示。 UNION运算符组合了两个或多个select语句的结果:

SELECT * FROM ( 
  SELECT * FROM <table> 
  WHERE place IN ( 'United States', 'United Kingdom', 'Bahrain' ) 
  ORDER BY place DESC 
) A 
UNION 
SELECT * FROM ( 
  SELECT * FROM <table> 
  WHERE place NOT IN ( 'United States', 'United Kingdom', 'Bahrain' )
  ORDER BY place ASC 
) B;