2016-07-31 67 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