首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 累計求和(運行總計):窗口函數 SUM() OVER 實現每日留存率

     編輯:程式設計綜合問答

源數據


日期       增加   減少
2015-04-24 18709 12608
2015-04-25 28508 11412
...

目標:留存率 = 累計(增加 - 減少)

標準 SQL (窗口函數)


SELECT
    日期,
    增加,
    減少,
    SUM(增加 - 減少) OVER (ORDER BY 日期 ROWS UNBOUNDED PRECEDING) AS 留存率
FROM 日表
ORDER BY 日期;

不支持窗口函數的舊版本 (相關子查詢)


SELECT
    t1.日期,
    t1.增加,
    t1.減少,
    (SELECT SUM(t2.增加 - t2.減少) FROM 日表 t2 WHERE t2.日期 <= t1.日期) AS 留存率
FROM 日表 t1
ORDER BY t1.日期;

MySQL 8.0+ / PostgreSQL / SQL Server 2012+ / Oracle 均支持窗口函數,性能優於子查詢。

若源數據為聚合視圖

可在視圖定義中直接加入窗口函數列,應用層直接查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved