我有一个表格,其中包含有关某个项目的信息,另一个表格引用该项目的所有者,如下所示:
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
答案 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
子句引用表;您可以从baseItem
或itemOwner
开始,在这种情况下没有任何区别。您可以将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