【问题标题】:SQL left join with SUMSQL 左连接与 SUM
【发布时间】:2017-01-15 05:06:44
【问题描述】:

我需要将一个表与另一个表连接起来,对于左表中的每种类型的组,我在第二个表中得到了这个值类型的总和,其中 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)

我错过了什么?

【问题讨论】:

  • ORDER by 应该在 WHERE 子句之后。

标签: mysql sql sum left-join


【解决方案1】:

您没有为子查询设置别名,并且您的子查询没有选择您在主查询中加入的字段。正如其他人提到的那样,子查询中的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的删除。

【讨论】:

  • 谢谢,但它没有告诉我 - 错误:“WHERE”第 7 行或附近的语法错误:WHERE rov.orbiting_group_type_id = 4) as rov ^
  • @EvgeniyKleban 你说得对,WHERE 应该在 GROUP BY 之前,相应地更改它。无法测试SQL,因为我没有相应的表定义。希望这个版本对你有用。
【解决方案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 之后。

【讨论】:

  • 它实际上应该是 SELECT * FROM orbiting_group_types ogt LEFT JOIN (SELECT SUM(val), orbiting_group_type_id FROM report_orbiting_vals subrov WHERE subrov.orbiting_group_type_id = 4 GROUP by orbiting_group_type_id) rov ON ogt.id = rov.orbiting_group_type_id
【解决方案3】:

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

【讨论】:

  • 这只处理问题中 3 个错误中的 1 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多