考虑到以下查询:
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,等等(因此表关系显然是一对多的)。
问题:我需要知道每个事务的,多少产品支付了多少。这是查询,包括两个按选项分组的查询:
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]我需要知道两组在选择上是否有区别。在文档中,我找不到关于按行为分组的相关信息,因此,如果能帮助澄清这一问题,我将不胜感激。
发布于 2017-04-10 13:17:05
inner join的结果将是一组具有匹配的事务ID的行,因此该列可以拥有的值集在transaction表和transaction_product表上都是相同的。group by将为分组列的每个可用值返回一行,共享相同值的所有行都将使用您使用的聚合函数进行聚合。结果结果:您拥有的两个选项之间没有任何区别,因为相同的行将按照完全相同的标准分组,即两边的值集是相同的。
TL/DR
根本没有什么区别。
发布于 2017-04-10 13:14:32
不管你选择了哪一种,你选择在你的小组中加入哪个条款,都是没有区别的。每个事务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`.idhttps://stackoverflow.com/questions/43323952
复制相似问题