将某些值排序到顶部

时间:2009-07-03 12:04:47

标签: mysql sql-order-by

我有一个MySQL表,其中包含以下数据(简化):

INSERT INTO `stores` (`storeId`, `name`, `country`) VALUES
(1, 'Foo', 'us'),
(2, 'Bar', 'jp'),
(3, 'Baz', 'us'),
(4, 'Foo2', 'se'),
(5, 'Baz2', 'jp'),
(6, 'Bar3', 'jp');

现在,我希望能够获得以客户所在国家/地区开头的分页商店列表。

例如,美国客户会看到以下列表:

Foo
Baz
Bar
Foo2
Baz2
Bar3

我现在正在使用的天真解决方案(例如美国客户和页面大小为3):

(SELECT * FROM stores WHERE country = "us") UNION (SELECT * FROM stores WHERE country != "us") LIMIT 0,3

有没有更好的方法呢?可以ORDER BY使用并告知在顶部放置一定值吗?

5 个答案:

答案 0 :(得分:15)

试试这个:

SELECT * FROM stores ORDER BY country = "us" DESC,  storeId

答案 1 :(得分:4)

首先获取搜索到的国家/地区,其余按字母顺序排列:

SELECT * 
FROM   stores 
ORDER BY country = 'us' DESC, country ASC

答案 2 :(得分:2)

您必须使用数字链接国家/地区的每个值,并使用大小写:

select *
from stores
order by case when country = "us" then 1
              else 0
         end desc

答案 3 :(得分:1)

创建国家/地区代码和订单表,在查询中加入,然后按国家/地区代码的顺序排序。

所以你会有一个看起来像

的表
CountryOrder

Code  Ord
----  ---
us    1
jp    2
se    3

然后是代码:

SELECT s.*
FROM Stores s
INNER JOIN CountryOrder c
   ON c.Code = s.Country
ORDER BY c.Ord;

答案 4 :(得分:1)

如何使用IF将最高值分配给美国行。

select if(country_cd='us,'aaaUS',country_cd) sort_country_cd, country_cd from stores Order by sort_country_cd

这将为您提供一个名为sort_country_cd的伪列。 在这里你可以将“US”映射到“aaaUS”。 JP仍可以映射到JP

这使得美国成为排序榜首。