2016-08-28 8 views
0

IDで注文された各国の10都市のレコードを選択して、Oracleデータベースでできるだけ早くクエリを実行する方法を教えてください。各国の10都市のレコードの選択

これは私のテーブルです:

ID 
CITY_NAME 
COUNTRY_NAME 
SIZE 

結果では、私は(私は国ごとに2つだけの都市を示しています、簡単にするために)見たい:

133 LONDON ENGLAND 10 
132 SHIRE ENGLAND 2 
44 BERLIN GERMANY 10 
43 MUNICH GERMANY 
+0

どの10都市ですか?それらを選ぶためのあなたの基準は何ですか? – Alejandro

+0

ID - 10最後に挿入された都市 – michealAtmi

答えて

0

これはIDに基づいて都市を選びますウィンドウ関数を持つ列

WITH CTE 
AS 
(SELECT 
ID, 
CITY_NAME, 
COUNTRY_NAME, 
SIZE, 
ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY ID) AS ROWNUM 
FROM TABLE 
) 
SELECT * FROM CTE WHERE ROWNUM<=10; 

パフォーマンスが線形..です

あなたのデータが以下の方法で配信されている場合、より良い成果を上げる可能性があるクロス適用を使用するもう1つのオプションがあります。

ほとんどすべての国に20-50以上の都市があり、正しいインデックスでは、クエリ(psuedo)はウィンドウ関数を使用するクエリよりパフォーマンスが優れています。

select id,country,size from table1 t1 
cross apply(select top 10 city from table2 t2 where t1.country=t2.country); 
+1

ステートメントの終了文字 ';'は、ステートメントの**終了**に始まりではなく、最初ではありません –

+0

Askerは、できるだけ。このクエリは本当に最速ですか?はいの場合、なぜ薄くするのですか?あなたは説明できますか? – krokodilko

+0

@krokodilko:利用可能なデータに基づいて更新 – TheGameiswar

関連する問題