简单的工作查询,列出每种许可证类型的许可证数量:
询问:
SELECT
COUNT(licenses.licenseID) AS total
FROM
licenses
GROUP BY
licenses.licensetypeID
结果:
total
=====
389
14
2
5
3
1
1
现在我想总结一下许可证的利润。一个表transactions
包含来自 PayPal 的所有交易。我mc_gross
用来总结。有时会有退款,所以mc_gross
是负数,交易比许可证多。
在我当前的数据库中,四个许可证被删除,因为交易已退还。
我的尝试:
SELECT
COUNT(licenses.licenseID) AS total,
SUM( transactions.mc_gross ) AS gross
FROM
licenses
LEFT JOIN transactions ON licenses.txn_id = transactions.txn_id
GROUP BY
licenses.licensetypeID
结果:
393 9020.00
14 NULL
2 NULL
5 NULL
3 100.00
1 NULL
1 NULL
请注意,第一个许可证类型现在总共比第一个查询多四个。由此我推断它正在计算事务表中的额外行。但我不明白为什么,因为我认为 aLEFT JOIN
会获取左表的所有行licenses
并连接到任何可用transactions
的 .
阅读不同的连接,我无法理解它们以产生我想要的结果。
我在做不正确的加入吗?还是我按错误的值分组?
请注意,我确实想列出所有许可证类型 - 即使它们的总和为零。
(让我知道是否需要整个表格结构 - 我跳过它以避免使问题过长。我希望包括所有相关信息。)