2017-05-09 42 views
0

我有一個數據庫,我正在查詢它來檢索計數。我現在的問題是這樣的:我在做一個select語句像下面滾動計數SQL

Select count(distinct(ID)) as countID 
     ,Activity 
from Activity_Data 
group by Activity_rank 
order by countID desc 

這給我回個

Activity Distinct Count 
AAA  100 
BBB  90 
CCC  80 

我所試圖實現的是一個滾動計數,其中

Activity Distinct Count Rolling Count 
AAA  100    100 
BBB  90    190 
CCC  80    270 

我試着這樣做

Select count(distinct(ID)) as countID 
     , sum(count(distinct(ID))) as SumID 
     , Activity from Activity_Data 
    group by Activity_rank 
    order by countID desc 

,但它給了我一個不是一個GROUP BY表達式

不太知道我做錯了,並希望指導。

關於

回答

1

你就近了。你需要一個分析功能:

Select count(distinct ID) as countID, 
     sum(count(distinct ID)) over (order by count(distinct ID) desc) 
from Activity_Data 
group by Activity_rank 
order by countID desc; 
+0

我這樣做,但它給了我一個ORA-06550:1號線,列118:ORA-00904: 「COUNTID」:無效的標識符 – Adam

+0

@AdrianLeeXinhan。 。 。我修正了這一點。我只是沒有注意到'countId'是聚合的結果,而不是表中的列。 –

+0

啊我現在能夠做到了! :D我接過了功能,它的工作。非常感謝:D – Adam

0

我不相信你可以嵌套聚合函數。試試這個反而:

WITH CTE AS (SELECT 
Activity, 
COUNT(DISTINCT ID) as CountID 
FROM Activity_Data 
GROUP BY Activity) 

Select Activity, CountID, sum(CountID) OVER (ORDER BY ACTIVITY) as RollingSubtotal 
FROM CTE 
ORDER BY ACTIVITY