跨3个相关表的SQL选择命令SUM

时间:2019-03-04 11:58:38

标签: sql

我已经更改了数据库结构,以使其更适合将来使用。现在,我在使用新的选择查询时遇到了麻烦。

我有一个称为活动的表,该表具有活动列表以及该活动每分钟值得多少步。该表的结构如下:

Activities
id     act_name     act_steps
12     Boxing       250
14     Karate       300
17     Yoga         89

我还有另一个称为距离的表,其结构如下:

Distance
id     dist_activity_id    dist_activity_duration    member_id
1      12                  60                        12
2      14                  90                        12
3      17                  30                        12

我有一个查询,该查询将求和并生成距离表中所有活动的总计

SELECT ROUND(SUM(act_steps * dist_activity_duration / 2000),2) AS total_miles
FROM distance,
     activities
WHERE activities.id = distance.dist_activity_id

这很好。

为了将来进行验证,以防万一活动的步骤数发生了变化,我设置了一个名为steps的表,其结构如下:

Steps
id     activity_steps
1      6
2      250
3      300
4      89

然后我更新了活动表,删除了act_steps列并将其替换为steps_id,因此现在看起来像这样:

Updated activities
id     act_name     steps_id
12     Boxing       2
14     Karate       3
17     Yoga         4

我不确定如何创建选择命令以使用新结构获取SUM。

有人可以帮我吗?

谢谢

韦恩

1 个答案:

答案 0 :(得分:1)

学习使用正确的JOIN语法!您的查询应类似于:

SELECT ROUND(SUM(a.act_steps * d.dist_activity_duration / 2000), 2) AS total_miles
FROM distance d JOIN
     activities a 
     ON a.id = d.dist_activity_id;

如果您需要查找步骤,请添加另一个JOIN

SELECT ROUND(SUM(s.activity_steps * d.dist_activity_duration / 2000), 2) AS total_miles
FROM distance d JOIN
     activities a 
     ON a.id = d.dist_activity_id JOIN
     steps s
     ON s.id = a.steps_id;