gpt4 book ai didi

mysql - 如何在sql关系中批量添加(基于另一个关系中的查询结果)?

转载 作者:行者123 更新时间:2023-11-29 10:33:22 25 4
gpt4 key购买 nike

我如何在sql中做这个问题(取自glassdoor):

您有一个表,其中包含日期、user_id、song_id 和计数。它会在每天结束时显示用户在其历史记录中听过给定歌曲的次数。所以count就是累加和。您必须根据第二个表每天更新此表,该表实时记录用户收听给定歌曲的时间。基本上,每天结束时,您都会转到第二个表并提取每个用户/歌曲组合的计数,然后将此计数添加到具有生命周期计数的第一个表中。

我特别不知道如何以这种批量/大量/循环类型的方式更新表,并且希望使用 mysql 代码来实现类似的功能。我没有编写代码,因为我不知道如何以有效的方式进行如此大规模的添加。

最佳答案

听起来您没有向现有计数添加任何内容,而是插入了当天的新记录,其中包含当天的总播放计数。历史表中的旧记录不更新

每天结束时,您运行以下命令:

INSERT INTO playhistory
SELECT CURDATE(), user_id, song_id, count(*)
FROM individualplays
GROUP BY user_id, song_id

Individualplays 表始终保存用户和歌曲 ID。如果新用户今天播放同一首歌曲 10 次,则计数 (*) 将为 10。明天,如果她再播放该歌曲 5 次,则计数现在将为 15

如果您不能保证在一天结束时运行查询,您的 individualplays 表需要播放歌曲的日期和时间,然后在第二天的任何时间,您可以这样更新您的历史记录表:

INSERT INTO playhistory
SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY), user_id, song_id, count(*)
FROM individualplays
WHERE playdate < CURDATE()
GROUP BY user_id, song_id

你实际上使用 MySQL 是一种耻辱,因为更强大的 RDBMS 可以通过使用分析/窗口函数动态地完全从 individualplays 表中获取历史记录;可以执行诸如计算每个用户/歌曲从时间开始到当前行的所有行之类的设备。您可以在 MySQL 中模拟这些,但它非常令人讨厌 - 它基本上会涉及在 userid=userid、songid=songid 和 playdate 上将 individualplays 表连接到自身

关于mysql - 如何在sql关系中批量添加(基于另一个关系中的查询结果)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com