1

私は3つの列a、b、および人物のマッピングを表す重みを持つテーブルを持っています。テーブルには +- 1 T の行があります。

簡単な問題は次のように説明できます。

次のような特定の a の上位 20 の関係が必要です。

SELECT * FROM my_table WHERE a = ? ORDER BY weight LIMIT 20;

本当の問題は、これを 1000 回実行する必要があり、このクエリを 1000 回実行すると時間がかかることです。私の質問は、単一の SQL クエリでそれを行うにはどうすればよいかということです。

ご協力いただきありがとうございます。

4

2 に答える 2

1

関数を使用しRow_number()ます。ここでは、重量(つまり重量順)に基づいて上位20を想定しています。

すべてのaの上位20レコードを取得するには;

select a,b, weight 
from (
    select a,b, weight, Row_number() over (partition by a order by weight) rn
    from my_table  
) AB
where rn<21
order by rn

シングルaのトップ20レコードを取得するには;

select top(20) a,b, weight
from my_table
where a = yourValue
order by weight
于 2013-01-04T11:07:11.180 に答える
0

この解決策を試してください:

SELECT *
  FROM my_table t1
 WHERE 20 <= ( SELECT COUNT(*) FROM my_table t2 WHERE t2.a=t1.a AND t2.weight < t1.weight)
 ORDER BY a, weight;
于 2013-01-04T11:03:32.583 に答える