我有一张表,其中包含一个客户ID,以及自首次注册以来下订单所需的小时数。
一个例子是:
UserId | TimeToPay
---------------------------------------------------
2DD6ABBB-C9A4-4373-B188-312DB8222859 | 0
C7438620-6431-4C13-B335-AA1A3E314C58 | 55
6AG22103-62B0-47A0-BE3F-7AE1A7A4C3B7 | 30
300A2E02-0799-47BB-BF36-070706F98149 | 8
43382839-E897-4E5F-A955-C9DDAF9B424B | 0
在上面的示例中,有2位客户在订购商品的一小时内下了订单,55小时后,所有客户都下了订单。此表不包含尚未下订单的客户。我正在尝试创建一个查询,显示有多少客户在什么时间内下订单的累积百分比。所以我最喜欢的输出是:
Hours | PercentageOfCustomers
-------------------------------
0 | 40
8 | 60
30 | 80
55 | 100
答案 0 :(得分:3)
您可以使用窗口COUNT(*)
获取滚动总数,并将其除以总客户数:
Select Distinct TimeToPay As Hours,
((Count(*) Over (Order By TimeToPay Asc) * 1.0) /
(Count(*) Over (Order By (Select Null)) * 1.0))
* 100 As PercentageOfCustomers
From Test
Order by Hours
答案 1 :(得分:0)
试试这个:
DECLARE @main_table TABLE ( UserId INT, TimeToPay INT)
INSERT INTO @main_table VALUES(1,0),(2,55),(3,30),(4,8),(5,0),(6,30),(7,30)
DECLARE @total INT = ( SELECT COUNT(col) FROM
( SELECT 'Z' col FROM @main_table GROUP BY TimeToPay )A GROUP BY col )
SELECT TimeToPay, (COUNT(TimeToPay)*100)/@total Percentage FROM @main_table
GROUP BY TimeToPay
希望它有所帮助。 :)