1

我有一个包含 3 列 a、b 和权重的表,代表一个人的映射。该表有 +- 1 T 行。

简单的问题可以这样解释:

我需要 givin 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 回答