SQL中匹配项的总和

时间:2018-06-25 16:20:56

标签: sql db2

在此数据库中,我需要找到每个客户为某个类别的图书支付的总金额,然后按其客户ID对其进行排序。该代码似乎可以正确运行,但是尽管总的来说正确的行数还是正确的,但最终却多了大约20行。

客户ID是customer的一部分,但不应出现在select子句中,当我尝试和ORDER BY时,会出现奇怪的错误。 DB引擎是DB2。

SELECT distinct customer.name, book.cat, sum(offer.price) AS COST
FROM offer

INNER JOIN purchase ON purchase.title=offer.title
INNER JOIN customer ON customer.cid=purchase.cid
INNER JOIN member ON member.cid=customer.cid
INNER JOIN book ON book.title=offer.title

WHERE
member.club=purchase.club
AND member.cid=purchase.cid AND purchase.club=offer.club
GROUP BY customer.name, book.cat;

1 个答案:

答案 0 :(得分:1)

您应该修正join条件,使其包含在where子句中(表关系之间通常更适合on子句)。

SELECT DISTINCT对于GROUP BY几乎是不合适的。

但这不是您的问题。您可以使用聚合函数:

GROUP BY customer.name, book.cat
ORDER BY MIN(customer.id)