要计算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
? !
答案 0 :(得分:4)
您必须包含该组,因为总和中有许多ID。如果你没有指定它,那么MySQL只选择第一个,并对整个结果集求和。 GroupBy告诉MySQL对每个Grouped By Entity进行求和(或通常聚合)。
答案 1 :(得分:3)
为什么我应该始终使用
GROUP BY
?
SUM()
和其他人Aggregate Functions。它们的本质要求它们与GROUP BY
结合使用。
没有它会失去什么?
来自文档:
如果在不包含GROUP BY子句的语句中使用组函数,则它等同于对所有行进行分组。
最后,没有什么可以记住,因为它们是GROUP BY
聚合函数。当结果包含整个结果集(错误地)时,您将很快从结果中看出您忘记了GROUP BY
,而不是分组的子集。