我有一个包含 3 列 a、b 和权重的表,代表一个人的映射。该表有 +- 1 T 行。
简单的问题可以这样解释:
我需要 givin a 的前 20 名关系,例如:
SELECT * FROM my_table WHERE a = ? ORDER BY weight LIMIT 20;
真正的问题是我需要为 1000 次执行此操作,并且执行此查询 1000 次很慢。我的问题是:如何在单个 SQL 查询中做到这一点。
谢谢你的帮助。
我有一个包含 3 列 a、b 和权重的表,代表一个人的映射。该表有 +- 1 T 行。
简单的问题可以这样解释:
我需要 givin a 的前 20 名关系,例如:
SELECT * FROM my_table WHERE a = ? ORDER BY weight LIMIT 20;
真正的问题是我需要为 1000 次执行此操作,并且执行此查询 1000 次很慢。我的问题是:如何在单个 SQL 查询中做到这一点。
谢谢你的帮助。
使用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
试试这个解决方案:
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;