如何计算累积百分比?

时间:2016-10-21 14:01:55

标签: sql sql-server

我有一张表,其中包含一个客户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

但是,当我使用thisthis之类的答案时,我不会获得累积百分比。如何获得所需的输出?

2 个答案:

答案 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 

希望它有所帮助。 :)