MYSQL谷歌面试查询

时间:2016-07-31 12:18:44

标签: mysql sql

我在面试时被问到这个问题,而且我不能完全做到这一点

你有一张表,你有date,user_id,song_id和count。它在每天结束时显示用户听过给定歌曲的次数。因此,计数是累积总和。

问题:您必须在第二个表格上每天更新基于,该表格会在用户收听某首歌曲时实时记录。基本上,在每天结束时,您转到第二个表并拉出每个用户/歌曲组合的计数,然后将此计数添加到具有生命周期计数的第一个表中。如果这是用户第一次收听某首歌曲,那么您将不会在生命周期表中使用该对,因此您必须在那里创建该对,然后添加最后一天的计数。

我的回答:在生命时间计数和最后一天计数之间使用完全外部联接,然后将两者相加......但是无法更新表格。

任何帮助?

1 个答案:

答案 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

相关问题