我是Postgres的新手 - 自从我做了任何与SQL相关的事情已经好几年了,所以我可能过度思考了这一点 - 但是...
我有一个子查询,它选择一堆ID(cs_seed
)来执行另一个查询。
我希望能够做的是维护子查询的顺序。我搜索了几个小时,发现row_number()
功能似乎很有希望,但我显然无法在WHERE IN
查询中使用它,因为它返回了多个列。
SELECT ca_seed, ca_biome, ca_percent
FROM colours_area
WHERE ca_seed IN (SELECT cs_seed, row_number() OVER (ORDER BY cs_percent DESC) AS rn
FROM colours_spawn
WHERE cs_biome = 140
ORDER BY cs_percent DESC LIMIT 10)
ORDER BY rn DESC;
我有什么方法可以做到这一点?或者我的方法是错的?
答案 0 :(得分:1)
使用join
?
SELECT ca.ca_seed, ca.ca_biome, ca.ca_percent
FROM colours_area ca JOIN
(SELECT cs_seed, row_number() OVER (ORDER BY cs_percent DESC) AS rn
FROM colours_spawn
WHERE cs_biome = 140
ORDER BY cs_percent DESC
LIMIT 10
) cs
ON ca.ca_seed = cs.cs_seed
ORDER BY rn DESC;
这假定cs_seed
仅在子查询中出现一次。否则,您可能需要进行更多操作来处理重复项。