2016-07-31 17 views
-1

私はインタビューでこの質問をした、と私は完全にMYSQLのGoogleの面接クエリ

をそれを行うことができませんでしたあなたは、日付、USER_ID、song_idカウントを持つテーブルを持っています。毎日の終わりに、ユーザーが特定の曲を何回聞いたかを履歴で何回表示します。カウントは累積合計です。

質問:毎日これを更新する必要がありますに基づいて、ユーザーが特定の曲を聴いたときにリアルタイムで記録する第2のテーブルです。基本的に、毎日の終わりに、この2番目のテーブルに移動し、各ユーザー/曲の組み合わせの数を取得し、このカウントを寿命カウントを持つ最初のテーブルに追加します。ユーザーが最初に曲を聴いたときは、生涯表にこのペアがありませんので、そこにペアを作成して最後の日のカウントを追加する必要があります。

私の答え:生涯のカウントと最後の日数の間の完全な外部結合を使用し、2つの合計...しかし、テーブルを更新できませんでした。

助けが必要ですか?

+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