【问题标题】:PostgreSQL - how do I know which partition I'm in when using window functions?PostgreSQL - 使用窗口函数时如何知道我在哪个分区?
【发布时间】:2018-10-10 08:13:37
【问题描述】:

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

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

基本上,我想知道这样的事情,假设窗口中有2个分区,每个分区有2行:

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

有什么想法吗?

【问题讨论】:

    标签: postgresql window-functions


    【解决方案1】:

    我们可以尝试使用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;
    

    Demo

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

    【讨论】:

    • 啊,有趣。我会试一试的。谢谢。
    • 正是我需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2023-03-06
    • 2017-03-27
    相关资源
    最近更新 更多