mysql - 如果第二个表多次出现,如何连接表并获取第一个表的总和

标签 mysql sql

我有两个表“temp_user_batches”和“user_activities”,我正在尝试查找 temp_user_batches 表中存在的用户的 user_activities 总和。

问题是 user_activities 的总和乘以 temp_user_batches 表中用户出现的比率的次数。

下面是 temp_user_batches 表

enter image description here

这是 user_activities 表

enter image description here

它应该给出 time_spent 列的总和 649 + 364 = 1013 但它给出的是 2016

我的查询是:

SELECT temp_user_batches.user_id as user_id, 
       temp_user_batches.activity_goal as goal,
       DATE_SUB(CURDATE(), INTERVAL 7 day) as min_activity_date, 
       CURDATE() as max_activity_date,
       (sum(user_activities.time_spent)/60) as total_time_spent
FROM temp_user_batches
INNER JOIN user_activities
   ON temp_user_batches.user_id = user_activities.user_id
WHERE activity_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 day) AND CURDATE()
group by user_id, goal, max_activity_date, min_activity_date

最佳答案

您可以使用包含来自表 temp_user_batchesDISTINCTuser_id、activity_goal 的派生表:

SELECT t1.user_id as user_id, 
       t2.activity_goal as goal,
       DATE_SUB(CURDATE(), INTERVAL 7 day) as min_activity_date, 
       CURDATE() as max_activity_date,
       (sum(t2.time_spent)/60) as total_time_spent
FROM (
   SELECT DISTINCT user_id, activity_goal
   FROM temp_user_batches) AS t1
INNER JOIN user_activities AS t2 ON t1.user_id = t2.user_id
WHERE activity_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 day) AND CURDATE()
group by user_id, goal, max_activity_date, min_activity_date

关于mysql - 如果第二个表多次出现,如何连接表并获取第一个表的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38301609/

相关文章:

mysql 并发

php - MySql Search query--关键字pendrive 但在db中是Pen Drive 所以需要查询才能显示记录

mysql - 在 rbenv 上安装 mysql gem

SQL IN 语句使用类似的语法?

php - Mysql查询多张表

sql - 在 PostgreSQL 表中查找循环引用?

mysql - 如何选择搭乘同一机型的乘客?

sql - PostgreSQL,选择案例合并

java - 我需要连接我的 java 应用程序来访问 Windows 7 x64 中的数据库?

python - 仅通过B表的插入操作更新A表的字段