1

2 番目に人口の多い国と 2 番目に人口の少ない国の人口を示す以下のクエリを使用しようとしています。これらの国の人口を選択する方法を見つけましたが、国名の選択を実装する良い方法が見つかりません。

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 番目に人口が多い/2 番目に人口が少ない国の国と人口を選択する方法を見つけましたが、問題はunion、2 つの ORDER BY (各選択に 1 つ) で 2 つの選択を使用できないことです。

私の問題を解決するために何ができるか考えていますか? 注:Postgresを使用しています

4

4 に答える 4

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
于 2014-03-26T12:03:09.557 に答える
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
);

はい、クエリの個々のレッグにLIMITとを使用できます。括弧を使用するだけです。詳細:同じテーブルで 2 つの SQL SELECT ステートメントを組み合わせるOFFSETUNION

大きなテーブルでこれを非常に高速にするには、必ずインデックスをオンにしてください。population

UNION ALL重複を折りたくないので、 を使用します。より速く、実際に正しい

于 2014-03-26T23:11:01.370 に答える
0

Found solution :

(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);

All I needed was parentheses...

于 2014-03-26T12:03:55.080 に答える