2016-07-31 92 views
-1

有人問我對這個問題採訪了,我不能這樣做完全MYSQL谷歌面試查詢

你有,你有日期,USER_ID,song_id和計數表。它在每天結束時顯示用戶已經聽過給定歌曲的歷史多少次。所以count是累計和。

問題:您必須在第二張桌面上每天更新此日誌基於,第二張桌面實時記錄用戶收聽給定歌曲的時間。基本上,在每天結束的時候,你會進入第二張表格,並計算每個用戶/歌曲組合的數量,然後將此計數添加到具有生命期計數的第一個表格中。如果這是用戶第一次收聽特定歌曲,則在生命表中不會有這一對,所以您必須在那裏創建對,然後添加最後一天的計數。

我的回答:使用生命時間計數和最後一天計數之間的完整外連接,然後將兩者相加......雖然無法更新表格。

任何幫助?

+0

我根本沒有發現這個問題的意見。 –

回答

1

你會這樣做,使用MySQL的等效「upsert」:on duplicate key update。事情是這樣的:

insert into history(date, user_id, song_id, count) 
    select date(rt.datetime), rt.user_id, rt.song_id, count(*) 
    from realtime rt 
    where rt.datetime >= curdate() - interval 1 day and 
      rt.datetime < curdate() 
    group by rt.user_id, rt.song_id 
    on duplicate key update count = count + values(count); 

我應該回答你的回答是更加錯誤的,因爲MySQL不支持full outer join

+0

謝謝Gordon,你可以幫助在SQL中編寫這個查詢嗎? – USER8129

+0

@ USER8129當然已經過去了 – Strawberry