2014-03-26 134 views
1

我嘗試使用下面的查詢,顯示國家人口秒最多和第二人口最少的國家。我想出了一個方法來選擇這些國家的人口,但是我找不到任何好的辦法來選擇國名。選擇兩列在同一個表多次

Select Max(population) 
From country Where population < (Select max (population) From country) 
Union 
Select Min(population) 
From country where population > (select Min(population) from country) ; 

我發現用於選擇國家和人口爲第二最/第二至少人口衆多的國家的方式,但問題是我不能在兩個選擇具有2 ORDER使用union BY(每個選擇)。

任何想法我能做些什麼來解決我的問題? 注:進出口使用的Postgres

+2

使用'OFFSET 1 LIMIT 1'和'ORDER BY'可以更好地實現。 –

回答

1
select * 
from (
    select country, population 
    from 
     (
      select country, population 
      from country 
      order by population 
      offset 1 limit 1 
     ) s 

    union 

    select country, population 
    from 
     (
      select country, population 
      from country 
      order by population desc 
      offset 1 limit 1 
     ) q 
) s 
+0

不必要的複雜。你可能對我的答案感興趣。 –

1

通過使用窗函數,你可以這樣做只是這樣的:

with t as (
    select population, 
     row_number() over (order by population desc) mx, 
     row_number() over (order by population asc) mn 
    from country) 
select 'second most population', population from t where mx = 2 
union all 
select 'second least population', population from t where mn = 2; 
0

找到解決方案:

(SELECT name, population 
FROM country 
ORDER BY population Desc 
LIMIT 1 OFFSET 1 
) 
UNION 
(
SELECT name, population 
FROM country 
ORDER BY population Asc 
LIMIT 1 OFFSET 1); 

所有我需要的是括號...

0

很多簡單,更快捷:

(
SELECT population 
FROM country 
ORDER BY 1 
OFFSET 1 
LIMIT 1 
) 
UNION ALL 
) 
SELECT population 
FROM country 
ORDER BY 1 DESC 
OFFSET 1 
LIMIT 1 
); 

,您可以使用LIMITOFFSETUNION查詢個人的腿。只需使用括號。詳細信息:
Combining two SQL SELECT statements on the same table

一定要對​​的指數,使這個速度非常快的更大的表。

並使用UNION ALL,因爲您不想摺疊重複項。更快,實際上正確