2016-04-21 9 views
0

林取的記錄,說國家,我總是需要在上面幾行(在第一個結果集)粘行:從表上名列榜首抓取了一些行始終在PostgreSQL的


ID國家

-------------------------- 
1  China 
2  Japan 
3  Taiwan 
4  USA 
5  Germany 
6  Brazil 
7  India 
-------------------------- 

我想保持日本和中國在列表頂部,然後進行排序,其餘

所以結果總是設置應該是

---------------------- 
Japan 
China 
next country 
next country 
next country 
next country 
---------------------- 

是否有任何方式使用CTE或任何其他適合此要求的方式來執行此操作?

進出口使用PostgreSQL 9.4

回答

1

你可以隨便挑這兩個國家進行再加入他們的休息,是這樣的:

select * from table 
    where country ='China' or country = 'Japan' 
union select * from table; 

union已經刪除了您的重複的行。

希望這會有所幫助。

1

我在mysql中使用這個命令的技術,但也應該在postgresql中工作。

SELECT * FROM table ORDER BY FIELD(country, 'Japan', 'China') DESC; 

至少在mysql中有一個奇怪的或不合邏輯的位是上面的查詢將列出中國,然後是日本,然後所有其餘的。

0

您可以用下面的查詢實現這個目標:

select your_column_list, 
(CASE country WHEN 'Japan' THEN 0 WHEN 'China' THEN 1 ELSE 2 END) AS nu 
from your_table_name 
ORDER BY nu ASC 
0

這要看保持粘性國家的信息。

如果這個信息是在該國表直接保存,因爲真>假的,你可以只ORDER BY is_sticky DESC, country_name ASC

如果此信息是由用戶填寫,而且你知道COUNTRY_ID,那麼你可以利用使用價值來保持希望的國家頂級名單:

SELECT label FROM country LEFT JOIN (VALUES (3), (4)) ontop (label_id) USING (label_id) ORDER BY ontop.label_id IS NOT NULL DESC, label ASC

當然,你可以在該國名義直接加入,但就是速度慢。