【问题标题】:Duplicate lines with postgres window functions具有postgres窗口功能的重复行
【发布时间】:2023-03-24 11:04:01
【问题描述】:

postgres 文档 (http://www.postgresql.org/docs/9.1/static/tutorial-window.html) 讨论了窗口函数。

在他们的例子中:

SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;

重复的处理如下:

 salary |  sum  
--------+-------
   3500 |  3500
   3900 |  7400
   4200 | 11600
   4500 | 16100
   4800 | 25700 <-- notice duplicate rows have the same value
   4800 | 25700 <-- SAME AS ABOVE
   5000 | 30700
   5200 | 41100 <-- same as next line
   5200 | 41100 <--
   6000 | 47100
(10 rows)

您如何做同样的事情以使重复的行不被赋予相同的值?换句话说,我希望这张表如下所示:

 salary |  sum  
--------+-------
   3500 |  3500
   3900 |  7400
   4200 | 11600
   4500 | 16100
   4800 | 20900 <-- not the same as the next line
   4800 | 25700 <-- 
   5000 | 30700
   5200 | 35900 <-- not the same as the next line
   5200 | 41100 <--
   6000 | 47100
(10 rows)

【问题讨论】:

    标签: postgresql psql


    【解决方案1】:

    在框架子句中使用rows,而不是默认的range

    select
        salary,
        sum(salary) over (
            order by salary
            rows unbounded preceding
        )
    from empsalary
    ;
     salary |  sum  
    --------+-------
       3500 |  3500
       3900 |  7400
       4200 | 11600
       4500 | 16100
       4800 | 20900
       4800 | 25700
       5000 | 30700
       5200 | 35900
       5200 | 41100
       6000 | 47100
    

    http://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2015-11-21
      相关资源
      最近更新 更多