考虑以下问题:
SELECT COUNT(table1.someField), COUNT(table2.someField)
FROM table1
INNER JOIN table2 ON table2.id = table1.id
GROUP BY table1.id
我试图了解table1.id
灌浆和table2.id
灌浆之间的差异(如果有的话)。简而言之,当在X=Y
上内部连接两个表格时,X
的填充和Y
的填充时有什么区别。就是这样。
真实世界的例子 - 非常简单:表transaction
包含交易信息(付费金额,日期等),表transaction_product
包含有关哪些产品的信息包含在哪个交易中。
因此,例如,交易号1可能包含产品编号1,2和3,依此类推(因此表关系显然是一对多)。
问题:我需要知道每笔交易,支付了多少产品的费用。这是查询,包括GROUP BY替代方案:
SELECT
`transaction`.id,
SUM(`transaction`.transaction_amount) AS total_amount,
COUNT(`transaction_product`.product_id) AS number_of_products
FROM `transaction`
INNER JOIN `transaction_product` ON `transaction_product`.transaction_id = `transaction`.id
GROUP BY [`transaction`.id [OR] `transaction_product`.transaction_id]
我需要知道两个GROUP BY替代方案之间是否存在差异。我在文档中找不到有关GROUP BY行为的相关信息,因此非常感谢任何有关澄清此事的帮助。
答案 0 :(得分:1)
您选择在GROUP BY子句中包含哪个ID没有区别。每个交易ID的总行数将是该交易的产品数量。这个查询应该得到你需要的东西:
SELECT
`transaction`.id,
SUM(`transaction`.transaction_amount) AS total_amount,
COUNT(1) AS number_of_products
FROM `transaction`
INNER JOIN `transaction_product` ON `transaction_product`.transaction_id =
`transaction`.id
GROUP BY `transaction`.id
答案 1 :(得分:1)
inner join
的结果将是一组具有匹配事务ID的行,因此列可以具有的值集在transaction
和{{1}上都是相同的表格。
transaction_product
将为分组列的每个可用值返回一行,并且所有共享相同值的行将与您使用的聚合函数聚合在一起。结果
结果:您所拥有的两个选项之间没有任何区别,因为相同的行将按照完全相同的标准进行分组,即两侧的值集合相同。
<强> TL / DR 强>
完全没有区别。