SQL与SUM保持连接

时间:2016-09-07 13:20:27

标签: mysql sql sum left-join

我需要将一个表与另一个表连接起来,对于左表中的每种类型的组,我在第二个表中得到了这个值类型的总和,其中group_type = 4。 我试过以下:

SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val)
 FROM report_orbiting_vals  rov
 ORDER by TYPE
 WHERE rov.orbiting_group_type_id = 4)
ON ogt.id = rov.orbiting_group_type_id

然而它给我一个错误 -

 syntax error at or near "WHERE"
LINE 8:  WHERE rov.orbiting_group_type_id = 4)

我错过了什么?

3 个答案:

答案 0 :(得分:3)

您没有为子查询设置别名,并且子查询不会选择您在主查询中加入的字段。正如其他提到的那样,子查询中的order by将不起作用。

我怀疑你正在寻找一个结果:

SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val), orbiting_group_type_id
 FROM report_orbiting_vals  rov
 WHERE rov.orbiting_group_type_id = 4
group by orbiting_group_type_id) as rov
ON ogt.id = rov.orbiting_group_type_id

注意as rovgroup by,选择子查询中的第二列以及order by的删除。

答案 1 :(得分:2)

试试这个:

SELECT *
FROM orbiting_group_types ogt
LEFT JOIN
(SELECT SUM(val)
FROM report_orbiting_vals  subrov
WHERE subrov.orbiting_group_type_id = 4
//ORDER by TYPE
) rov
ON ogt.id = rov.orbiting_group_type_id

1)您应该命名子查询以引用它们。您无法从子查询的外部向内部进行引用。

2)TYPE听起来不像列名

3)ORDER BY总是在WHERE之后。

答案 2 :(得分:0)

通常order by子句必须在where子句之后。此外,order by在子查询中毫无意义 - 在这种情况下,我怀疑你的意思是group by