2016-10-21 3 views
0

У меня есть таблица, состоящая из идентификатора клиента и количества часов, которые потребовались, чтобы разместить заказ с момента их первой регистрации.Как рассчитать накопленный процент?

Примером может быть:

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 

Однако, когда я использую ответы как this или this один, я не получаю кумулятивные проценты. Как получить желаемый результат?

ответ

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 

Надеется, что это помогает. :)

Смежные вопросы