计算 invoice
的价格(在单独的表中有 *invoice item
*s 并链接到 invoice
s),我写了这个查询:
SELECT `i`.`id`, SUM(ii.unit_price * ii.quantity) invoice_price
FROM (`invoice` i)
JOIN `invoiceitem` ii
ON `ii`.`invoice_id` = `i`.`id`
WHERE `i`.`user_id` = '$user_id'
但它只产生了一行。
经过研究,我发现在查询末尾必须有 GROUP BY i.id
。有了这个,结果符合预期。
在我看来,即使没有 GROUP BY i.id
,也不会丢失任何东西,它应该可以正常工作!
请用一些简单的句子告诉我...
为什么我应该总是使用额外的!!! GROUP BY i.id
,没有它会丢失什么,也许作为最有效的问题,如何我应该记住我丢失了额外的 GROUP BY
?!
最佳答案
您必须包括分组依据,因为有许多 ID 进入总和。如果您不指定它,那么 MySQL 只会选择第一个,并对整个结果集求和。 GroupBy 告诉 MySQL 对每个按实体分组的结果求和(或一般聚合)。
关于mysql - 为什么聚合函数不起作用,除非使用 GROUP BY 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351887/