2014-09-12 20 views
0

我不確切地知道該怎麼稱呼這個問題,所以如果標題很混淆,請致歉。我正在嘗試爲特定網站生成用戶活動摘要。該查詢返回每個類型的頁面點擊總數:通過外部字段分隔多個計數(*)的方法

select 
    count(case when internal_handle = 'content' then 1 else null end) as CONTENT, 
    count(case when data = '/webapps/assessment/take/launch.jsp' then 1 else null end) as ASSESSMENTS, 
    count(case when internal_handle = 'discussion_board_entry' then 1 else null end) as DISCUSSIONS, 
    count(case when data = '/webapps/blackboard/execute/uploadAssignment' then 1 else null end) as BB_ASSIGNMENTS, 
    count(case when data = '/webapps/turn-plgnhndl-BBLEARN/links/submit.jsp' then 1 else null end) as TII_ASSIGNMENTS, 
    count(case when data = '/webapps/osv-kaltura-BBLEARN/jsp/courseGallery.jsp' then 1 else null end) as COURSE_GALLERY, 
    count(case when data = '/webapps/osc-BasicLTI-BBLEARN/frame.jsp' then 1 else null end) as ECHO_360, 
    count(case when internal_handle = 'check_grade' then 1 else null end) as MY_GRADES 
from BBLEARN.ACTIVITY_ACCUMULATOR 
where course_pk1 = (select pk1 from BBLEARN.course_main where course_id = '2014FA.BOS.PPB.445.A') 
and user_pk1 in (select users_pk1 from BBLEARN.course_users where role = 'S' and crsmain_pk1 = course_pk1); 

所以結果是這樣的:

CONTENT,ASSESSMENTS,DISCUSSIONS,BB_ASSIGNMENTS,TII_ASSIGNMENTS,COURSE_GALLERY,ECHO_360,MY_GRADES 
5787,954,335,0,0,0,837,222 

我的目標,不過,是有它每用戶點擊分離。舉例來說,我願意像一個結果:

USER_PK1,CONTENT,ASSESSMENTS,DISCUSSIONS,BB_ASSIGNMENTS,TII_ASSIGNMENTS,COURSE_GALLERY,ECHO_360,MY_GRADES 
USER_A,250,79,41,0,0,0,66,7 
USER_B,144,89,82,0,0,0,24,0 
USER_C,174,45,23,0,0,0,58,1 
--etcetera 

我能想象反覆運行上面的查詢,但我不熟悉不夠與Oracle有效地做到這一點。我該如何去做這件事?還是有更好的方式來獲得我正在尋找的領域?

在此先感謝!

+1

添加'按用戶分組' – zaratustra 2014-09-12 15:35:14

回答

3

只需添加一個group by

select user_pk1, 
     count(case when internal_handle = 'content' then 1 else null end) as CONTENT, 
     count(case when data = '/webapps/assessment/take/launch.jsp' then 1 else null end) as ASSESSMENTS, 
     count(case when internal_handle = 'discussion_board_entry' then 1 else null end) as DISCUSSIONS, 
     count(case when data = '/webapps/blackboard/execute/uploadAssignment' then 1 else null end) as BB_ASSIGNMENTS, 
     count(case when data = '/webapps/turn-plgnhndl-BBLEARN/links/submit.jsp' then 1 else null end) as TII_ASSIGNMENTS, 
     count(case when data = '/webapps/osv-kaltura-BBLEARN/jsp/courseGallery.jsp' then 1 else null end) as COURSE_GALLERY, 
     count(case when data = '/webapps/osc-BasicLTI-BBLEARN/frame.jsp' then 1 else null end) as ECHO_360, 
     count(case when internal_handle = 'check_grade' then 1 else null end) as MY_GRADES 
from BBLEARN.ACTIVITY_ACCUMULATOR 
where course_pk1 = (select pk1 from BBLEARN.course_main where course_id = '2014FA.BOS.PPB.445.A') and 
     user_pk1 in (select users_pk1 from BBLEARN.course_users where role = 'S' and crsmain_pk1 = course_pk1) 
group by user_pk1; 

如果user_pk1是不是你所說的「用戶」的意思,那麼你可能在另一個表加入。

+0

請參閱,如果我沒有在這裏提問,我會讓它更復雜。謝謝! – Cliff 2014-09-12 15:36:53