2016-10-21 356 views
0

我有一張由顧客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一個,我沒有得到的累積百分比。我如何得到我想要的輸出?

回答

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 
+0

很好,謝謝!我所要做的只是添加一個ORDER BY子句。我編輯了你的問題,以反映我用過的東西。 – ohyeah

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 

希望它能幫助。 :)