MySQL Select首先显示特定的列值

时间:2016-06-24 01:23:06

标签: mysql sql select sql-order-by

我有一张包含大约300万行的表格,包括城市,城市所在的国家和其他一些数据。

我想检索例如有限的行,其中城市的名称以某个字符串开头,但首先列出位于特定国家/地区的行。

我试图通过 country<>订购它们" us" 这是非常慢的,因为服务器必须在应用限制之前对所有找到的行进行排序。

现在我想出了以下声明:

(SELECT * FROM cities WHERE city LIKE "ab%" AND country = "at" LIMIT 5)
UNION
(SELECT * FROM cities WHERE city LIKE "ab%" LIMIT 5)
LIMIT 5

任何前缀长度都非常快,但它看起来有点脏。

有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

select top 5 *
, case when country = 'ab' then 1 
  else 0 end as rnk 
from cities
where lower(city) like 'ab%' 
or country = 'ab'
order by rnk desc;