在两个表上使用左连接和SUM,MYSQL

时间:2016-05-18 00:54:30

标签: php mysql

我有一个表格,其中包含有关某个项目的信息,另一个表格引用该项目的所有者,如下所示:

baseItem
--------
itemID   |  1   |   2   |  3  |  4  |
itemSize |  5   |   1   |  5  |  3  |
itemCost | 100  |  50   |  1  |  99 |

itemOwner
--------
ownerID  |  1  |  1  |  3
itemID   |  1  |  4  |  2

我所追求的是基于所有者的itemSize和itemCOST的SUMS。我环顾四周,但我见过的答案都没有意义吗?这是我能想到的最好的,显然不起作用:

SUM itemCost FROM baseItem.itemCost LEFT JOIN itemID ON itemOwner.itemid = baseItem.itemid

2 个答案:

答案 0 :(得分:0)

SELECT ownerId, sum(itemCost) as OwnerCost,  sum(itemSize) as OwnerSize
FROM itemOwner
LEFT JOIN baseItem
  ON itemOwner.itemid = baseItem.itemid
GROUP BY ownerId

SELECT语句列出了您要从表中读取的字段;在这种情况下,您需要两个值:所有者的id,以及他们拥有的项的值的总和。但是,由于您正在使用sum(聚合函数),因此您必须GROUP您的元素超过某个参数。在这种情况下,您希望按ownerId对其进行分组。

FROM子句引用表;您可以从baseItemitemOwner开始,在这种情况下没有任何区别。您可以将LEFT JOIN视为创建新表的笛卡尔积,其中包含来自两者的笛卡尔积的每个元素,并由ON子句过滤。但是,左表中的所有项目始终为itemOwner,并且当baseItem中没有匹配的行时,所有字段都将为NULL。 SUM函数将表现为0,并且应该为baseItem表中的非匹配行返回0和。

答案 1 :(得分:0)

可能它不起作用,因为它是无效的SQL语句。请尝试以下代码

SELECT SUM(baseItem.itemCost) FROM baseItem 
   LEFT JOIN itemOwner ON itemOwner.itemId = baseItem.itemId