2012-09-17 46 views
1

分組結果給了我兩列的輸出:SQL - 通過下面的查詢總計

Day Num_Users_Retained 
0 209312 
1 22139 
2 11457 

等等,所有的。不過我想天的方式爲259(每天在2012年) 0將num_users_retained中所有值的總和包含在0到259之間,然後我希望第1天包含1-259中所有值的總和,依此類推,直到我到達最後一天。這裏是原來的查詢:

--Retention since January 1,2012-- 
select retention as Day,count(retention) as Num_Users_Retained 
from (select player_id,round(init_dtime-create_dtime,0) as retention 
from player 
where Trunc(Create_Dtime) >= To_Date('2012-jan-01','yyyy-mon-dd') 
and init_dtime is not null) 
Group by retention 
order by 1 

有什麼建議嗎?

回答

1
select retention as Day 
    , Sum(count(retention)) over(order by retention desc) as Num_Users_Retained 
from (select player_id 
      , round(init_dtime-create_dtime,0) as retention 
     from player 
     where Trunc(Create_Dtime) >= To_Date('2012-jan-01','yyyy-mon-dd') 
     and init_dtime is not null 
     ) 
Group by retention 
order by retention 
+0

非常接近,我只是稍微編輯了我用來查詢運行的內容。非常感謝。 – Americo

2

使用分析功能

select 
    day, 
    num_users_retained, 
    sum(num_users_retained) over (order by day) as total_num_users_retained 
from churn 

http://www.sqlfiddle.com/#!4/24e02/1

此查詢寫在你的結果集。您可能可以將其應用於原始查詢。

+0

我想補充說的,但它口口聲聲說「不是一個單組function..i只是增加我的原始查詢在括號中的‘流失’area..am我在正確的道路上?感謝您的答覆。 – Americo

+0

第二種方法應該可行,但可能不是非常優化。我不想在沒有測試的情況下提供查詢。這就是爲什麼我沒有嘗試修改原始查詢的原因。在SQL Fiddle中構建一個示例模式,我們將解決它。 –

+0

我建立了自己的。請參閱http://www.sqlfiddle.com/#!4/3a722/4請選擇/突出顯示單個SQL查詢並執行。 –