有没有一种方法可以编写 SQL 查询,根据另一列的计数 returns 累积结果?
Is there a method to write a SQL query that returns cumulative results based on the count of another column?
我有一个查询,我正在计算自服务开始以来每天注册该服务的新用户总数。
到目前为止我有:
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
这个returns:
Date_Created | New_Users
--------------------------
2020-01-01 1
2020-01-03 3
2020-01-04 2
2020-01-06 5
2020-01-07 9
我想要的是 return 第三列,其中包含从开始到现在的每一天的累计总数。所以第一天只有一个新用户。 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()
函数,这样我就可以将每个连续的行分开并加在一起,尽管我不确定这是否正确。我的感觉是,我可能正在认真考虑这个问题,而此时的逻辑只是在逃避我。感谢您的帮助。
作为初学者:我建议聚合而不是 DISTINCT
和 window 计数。这使意图更清晰,并且可能更有效。
然后,您可以使用 window 总和来计算累积计数。
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
我有一个查询,我正在计算自服务开始以来每天注册该服务的新用户总数。
到目前为止我有:
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
这个returns:
Date_Created | New_Users
--------------------------
2020-01-01 1
2020-01-03 3
2020-01-04 2
2020-01-06 5
2020-01-07 9
我想要的是 return 第三列,其中包含从开始到现在的每一天的累计总数。所以第一天只有一个新用户。 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()
函数,这样我就可以将每个连续的行分开并加在一起,尽管我不确定这是否正确。我的感觉是,我可能正在认真考虑这个问题,而此时的逻辑只是在逃避我。感谢您的帮助。
作为初学者:我建议聚合而不是 DISTINCT
和 window 计数。这使意图更清晰,并且可能更有效。
然后,您可以使用 window 总和来计算累积计数。
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