sql - 计算列上的窗口函数

标签 sql postgresql window-functions postgresql-10

我正在编写一个看起来像这样的查询:

select parent.id,
       parent.date, 
       sum(child.amount) filter (where child.is_ok) as child_sum,
       sum(sum(child.amount) filter (where child.is_ok)) over (order by parent.date)
  from parent
  left join child on parent.id = child.parent_id
 group by parent.id, parent.date
 order by parent.date desc

如您所见,我正在使用一个窗口函数来获取超过 child.amount 的运行总计。

问题是,是否有任何标准或非标准的方法来引用 child_sum 而无需在窗口函数 sum 中复制其表达式?

我正在使用 Postgres 10。

最佳答案

您可以使用子查询:

SELECT id, date, child_sum,
       sum(child_sum) over (order by date)
FROM (SELECT parent.id,
             parent.date, 
             sum(child.amount) FILTER (WHERE child.is_ok) AS child_sum
      FROM parent
      LEFT JOIN child ON parent.id = child.parent_id
      GROUP BY parent.id, parent.date
     ) AS subq
ORDER BY date DESC;

关于sql - 计算列上的窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55413113/

相关文章:

sql - 从两个带有循环外键的表中删除

sql - 如何创建一个查询,将任何大小写的匹配记录更新为大写

sql - PostgreSQL:根据 JSON 数组中的 JSON 值对行进行排序

sql - PostgreSQL 分组依据内的窗口函数

sql - 均匀间隔的多个平均值

sql - 如何用Oracle触发器通知JBoss

sql - 以保证数据库一致性的方式生成一组包含单个表转储的文件

database - GoLang Multi-Tenancy 应用程序数据库连接

sql - 具有重置值的累加和然后恢复

sql - 无法使用下一条记录中的同一列更新表错误 1093