数据库—是否有一种方法可以编写基于另一列的计数返回累积结果的sql查询?

polhcujo  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(271)

我有一个查询,其中我正在计算自某项服务启动以来每天注册到该服务的新用户总数。
到目前为止,我已经:

SELECT DISTINCT CONVERT(DATE, Account_Created) AS Date_Created, 
COUNT(ID) OVER (PARTITION BY CONVERT(DATE, Account_Created)) AS New_Users
FROM My_Table.dbo.NewAccts
ORDER BY Date_Created

这将返回:

Date_Created | New_Users
--------------------------
2020-01-01         1
2020-01-03         3
2020-01-04         2
2020-01-06         5
2020-01-07         9

我想返回第三列,从开始到现在的每一天的累计总数。所以第一天只有一个新用户。1月3日,三个新用户从一开始就注册了四个——以此类推。

Date_Created | New_Users | Cumulative_Tot
------------------------------------------
2020-01-01         1             1
2020-01-03         3             4
2020-01-04         2             6
2020-01-06         5             11
2020-01-07         9             20

我的思考过程是 ROW_NUMBER() 函数,以便我可以将每个连续的行分开并添加到一起,尽管我不确定这是否正确。我的感觉是,我可能想得太多了,逻辑只是在逃避我的时刻。谢谢你的帮助。

lp0sw83n

lp0sw83n1#

首先:我推荐聚合而不是 DISTINCT 还有Windows数。这使得意图更加清晰,而且可能更有效率。
然后,可以使用窗口和来计算累计计数。

SELECT 
    CONVERT(DATE, Account_Created) AS Date_Created, 
    COUNT(*) AS New_Users
    SUM(COUNT(*)) OVER(ORDER BY CONVERT(DATE, Account_Created)) Cumulative_New_Users
FROM My_Table.dbo.NewAccts
GROUP BY CONVERT(DATE, Account_Created)
ORDER BY Date_Created

相关问题