2013-08-07 62 views
0

我有一個用戶表,一個事件表(包含一個城市位置)和一個RSVP表(用戶去哪個事件)。我想分析哪些用戶參加了某個城市中最多的活動。按位置統計用戶RSVP的最有效方法?

我想我需要一個名爲user_location_counts的新表,其中我有以下列:user,location和count,其中count是給定城市中給定用戶的RSVPs的計數。然後,我只需要像這樣的查詢:

SELECT user FROM user_location_counts WHERE city = 'XYZ' ORDER BY count DESC. 

建立此表的最有效方法是什麼?有沒有更好的方法來做到這一點?我有大約3M用戶和10M RSVP項目,這意味着效率非常重要。

回答

1

您可以創建表像的查詢:

create table User_Location_Counts as 
    select r.userId, e.city, count(*) as cnt 
    from rsvp r join 
     events e 
     on e.eventId = r.eventId 
    group by r.userId, e.city; 

如果你需要保持表最多最新的新數據添加,那麼你可能需要觸發器。或者,如果您能忍受滯後,則需要定期重建表格。

+0

謝謝!內部聯接不會允許您刪除組?也不算數(1)比數(*)快嗎?我一直在運行查詢10分鐘,它還沒有解決... –

+0

@DavidBailey。 。 。一個內部聯接與一個組無關。你想要每個城市的計數。至於「count(*)」還是「count(1)」是否更快,我建議您查看關於該主題的大量問題(並且在執行階段,它們應該具有相同的性能)。 –

+0

謝謝Gordon。我也會研究觸發器。我已經看過伯爵,我的結論和實驗表明伯爵(1)更快。乾杯! –

相關問題