【问题标题】:3 tables sql sum divided by a minus between two fields not working3 表 sql 总和除以两个字段之间的负数不起作用
【发布时间】:2023-01-20 01:27:51
【问题描述】:

我有 3 个表:formulario、viaverde 和 reparacoes。 其中一个字段在所有表中都是相等的,称为 matricula,我试图将每个算术运算分组到它。 但我一直收到 matricula is ambiguous 或 synthax 错误的错误,我该如何实现?

我尝试了以下代码:

JOIN (
    SELECT matricula, (total)/(kmsTotais) AS custoKM
    FROM (
        SELECT matricula, SUM(kmfim - quilometragem) AS kmsTotais
        FROM formulario
        GROUP BY matricula
    ) e
    JOIN (
        SELECT matricula, abastecimento_euros as total FROM formulario
        UNION ALL
        SELECT matricula, custo as total FROM viaverde
        UNION ALL
        SELECT matricula, valor as total FROM reparacoes
    ) as subquery
    GROUP BY matricula
) i ON i.matricula = f.matricula

【问题讨论】:

  • 如果一个列名在join的多个表中,需要使用tablename.columnname
  • 您在嵌套的JOIN 中没有ON 条件。应该是ON e.matricula = subquery.matricula
  • 看起来您的查询可能简化了很多,您可以分享示例数据和预期输出吗?

标签: mysql


【解决方案1】:

您需要使用表别名限定 matricula 以使其明确。

JOIN (
    SELECT e.matricula, SUM(total)/MAX(kmsTotais) AS custoKM
    FROM (
        SELECT matricula, SUM(kmfim - quilometragem) AS kmsTotais
        FROM formulario
        GROUP BY matricula
    ) e
    JOIN (
        SELECT matricula, abastecimento_euros as total FROM formulario
        UNION ALL
        SELECT matricula, custo as total FROM viaverde
        UNION ALL
        SELECT matricula, valor as total FROM reparacoes
    ) as subquery ON e.matricula = subquery.matricula
    GROUP BY e.matricula
) i ON i.matricula = f.matricula

您也可以将 ON e.matricula = subquery.matricula 替换为 USING (matricula)。因为这表明列名在两个表中是相同的,所以您不需要限定该列。

【讨论】:

  • 说 subquery.total 不在 groupby 上
  • 您需要汇总同一个matricula 的所有总数。
  • 是的,我会有很多预科课程,需要进行算术运算并按每个预科课程对它们进行分组
  • 我已经将答案更新为使用SUM(total)
  • 说:e.kmsTotais' 不在 GROUP BY 中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2020-12-16
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多