如何在MySQL中对不同的选择进行求和
该查询工作并返回正确汇总的不同金额。然后我尝试在一个更大的查询中获取这些信息:如何在MySQL中对不同的选择进行求和,mysql,Mysql,该查询工作并返回正确汇总的不同金额。然后我尝试在一个更大的查询中获取这些信息: SELECT SUM(`PR Requests`), CAR, Request_State FROM ( SELECT DISTINCT Po_Line_Amount AS `PR Requests`, Project_Code AS CAR, Request_State FROM
SELECT
SUM(`PR Requests`),
CAR,
Request_State
FROM
(
SELECT DISTINCT
Po_Line_Amount AS `PR Requests`,
Project_Code AS CAR,
Request_State
FROM
Table1
WHERE NOT (
Request_State LIKE '%canceled%'
OR Request_State LIKE '%pulled_back%'
)
) t
这会运行,但它为PR提供NULL,我希望得到PR请求的总和。我的别名错了吗?如果
PR
为空,并且由于您正在进行左连接,这只能意味着在b.CAR=a.7ca的条件下没有结果。汽车
找到了它;一时兴起,我试着在selectdistinct代码的t后面添加一个groupby
SELECT ID, Title, `Start Date`, `7ca. CAR` AS CAR, b.PR, c.Capex, c.PO_Committed AS `PO Committed`, c.PO_Invoiced AS `PO Invoiced`
FROM Table3 a
LEFT JOIN (
SELECT
SUM(`PR Requests`) AS PR,
CAR,
Request_State
FROM
(
SELECT DISTINCT
Po_Line_Amount AS `PR Requests`,
Project_Code AS CAR,
Request_State
FROM
Table1
WHERE NOT (
Request_State LIKE '%canceled%'
OR Request_State LIKE '%pulled_back%'
)
) t
) b ON b.CAR = a.`7ca. CAR`
LEFT JOIN (
SELECT Car_Number, SUM(Capex) AS Capex, SUM(PO_Committed) AS PO_Committed, SUM(PO_Invoiced) AS PO_Invoiced
FROM Table2
GROUP BY Car_Number
) c ON c.Car_Number = a.`7ca. CAR`
WHERE `Snapshot` = (SELECT MAX(`Snapshot`) FROM RandD_Playbook)
AND NOT ISNULL(PO_Committed)
GROUP BY
ID, Title
这清除了空值。不确定为什么需要这样做,但它在所有情况下都能工作,所以这对我来说很好。每次执行一个子查询,看看是否得到预期的结果。另外,给我们一些示例数据。谢谢。所有这些查询最初都是建立在它们自己的基础上的,并且都是有效的。如果我取出SELECT DISTINCT部分,只使用不带该部分的查询,它工作正常并返回值。问题是Table1数据中存在重复(实际上是三倍),而我并不拥有传入该表的数据;它不是一个简单的集合,因为它至少需要3个表,除了当我自己拉它与车上已知的良好匹配时它不是空的。自己拉记录不同于用多个表连接它,特别是当你处理
左连接和分组方式s时。我猜您的b
或c
表不满足产生NULL
的条件之一。您的分组依据
可能返回空记录,而不是找到的PR
记录。例如,如果您删除了两个左连接
s并使它们成为一个连接
,您将无法获得预期的整个数据集,但我打赌每个记录都会有一个PR
值;你可以在上面看到我的答案。
SELECT ID, Title, `Start Date`, `7ca. CAR` AS CAR, b.PR, c.Capex, c.PO_Committed AS `PO Committed`, c.PO_Invoiced AS `PO Invoiced`
FROM Table3 a
LEFT JOIN (
SELECT
SUM(`PR Requests`) AS PR,
CAR,
Request_State
FROM
(
SELECT DISTINCT
Po_Line_Amount AS `PR Requests`,
Project_Code AS CAR,
Request_State
FROM
Table1
WHERE NOT (
Request_State LIKE '%canceled%'
OR Request_State LIKE '%pulled_back%'
)
) t
GROUP BY CAR
) b ON b.CAR = a.`7ca. CAR`
LEFT JOIN (
SELECT Car_Number, SUM(Capex) AS Capex, SUM(PO_Committed) AS PO_Committed, SUM(PO_Invoiced) AS PO_Invoiced
FROM Table2
GROUP BY Car_Number
) c ON c.Car_Number = a.`7ca. CAR`
WHERE `Snapshot` = (SELECT MAX(`Snapshot`) FROM RandD_Playbook)
AND NOT ISNULL(PO_Committed)
GROUP BY
ID, Title