PostgreSQL-使用窗口函数时如何知道我所在的分区?

时间:2018-10-10 08:13:37

标签: postgresql window-functions

我一直在使用Windows函数,因为它们对于我当前的需求非常有用。 row_number()非常方便让我知道当前分区的行。我已经阅读了有关窗口函数的文档并进行了在线搜索,但是找不到我想要的答案。我希望这里的人可以告诉我我想要的东西是否可能。

我的问题是这样的:是否可以像row_number()告诉您所在的分区中的哪一行那样,找出窗口所在的分区?

基本上,我想知道类似的信息,假设窗口中有2个分区,每个分区中有2行:

partition 1 row 1
partition 1 row 2
partition 2 row 1
partition 2 row 2

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我们可以尝试使用DENSE_RANKROW_NUMBER

WITH yourTable AS (
    SELECT 'A' AS col1, 1 AS col2 UNION ALL
    SELECT 'A', 2 UNION ALL
    SELECT 'A', 3 UNION ALL
    SELECT 'B', 1 UNION ALL
    SELECT 'B', 2 UNION ALL
    SELECT 'B', 3
)

SELECT *,
    DENSE_RANK() OVER (ORDER BY col1) partition1,
    ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) partition2
FROM yourTable
ORDER BY
    col1, col2;

enter image description here

Demo

对于任意数量的分区,此处的一般模式是对前N-1个分区使用DENSE_RANK,然后对最后一个分区使用ROW_NUMBERROW_NUMBER将确保最后一个分区具有1,2,3,...作为序列。