Oracle 中的子排序

Sub Sorting in Oracle

我有一个人口统计数据库,其中有每个大陆、国家、州和城市的人口数量列表。我现在已经向这个 table 添加了一个排名列,我需要更新它。但是,排名需要在州一级进行。因此,一个州内的每个城市都会有一个排名 1..N。对于另一个州,排名将再次从 1..N 开始。

(注意:城市名称可以重复..即一个城市可能存在于多个州,但如果发生这种情况,它将有 2 个不同的行。PK 是 CONTINENT、CNTRY、STATE)。

我一直在尝试各种 select 子查询和 RANK 函数变体,但就是无法理解。有人可以帮忙吗?

要获得每个州的排名,您需要 PARTITION BY:

RANK() OVER (PARTITION BY CONTINENT, CNTRY, STATE ORDER BY poulation DESC)

如果有一个城市有两个州,您可能会改用 ROW_NUMBER。

并且因为这是一个小 table,您可以考虑在视图中动态计算排名,而不是在 update/insert.

时潜在地更新大量行。