简体   繁体   中英

Sum matching entries in SQL

In this database I need to find the total amount that each customer paid for books in a category, and then sort them by their customer ID. The code appears to run correctly but I end up with approximately 20 extra rows than I should, although the sum appears to be correct in the right rows.

The customer ID is part of customer , but is not supposed to appear in the select clause, when I try and ORDER BY it, I get strange errors. The DB engine is 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;

You should fix your join conditions to include the ones in the where clause (between table relationships usually fit better into an on clause).

SELECT DISTINCT is almost never appropriate with a GROUP BY .

But those are not your question. You can use an aggregation function:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM