SQL - 子查询的总和:我做错了什么?
SQL - Sum of a subquery: What are I am doing wrong?
我是 SQL 的新手,从几天前开始我的第一步。但要知道我已经到了死角。如果你愿意帮助我,那就太好了。
这些是必需的表格:
Table: Customer_Bonus
Bonus_ID、Customer_ID、金额
301, 100215, 100
302, 100924, 50
...
Table: Customer_Mapping
Customer_ID, 姓名, Adress_ID
100215, 美国能源部, 8203351
100924,Al Capone 服务有限公司,849215
...
Table: Customer_Bonus_to_Invoice
Invoice_IDNR、Bonus_ID、金额
216523, 301, 10
...
244854, 302, 10
...
284111, 301, 10
...
299569, 302, 20
...
316017, 302, 10
...
我要回答的问题:如何得到所有已用红利的总和?
这就是我想要的
Customer_ID,姓名,Bonus_ID,奖金总额,已用奖金总额
100215,美国能源部,301、100、20
100924, Al Capone 服务有限公司, 302, 50, 40
...
这是我一直在尝试的
SELECT
Customer_Mapping.Customer_ID
Customer_Mapping.Name,
Customer_Bonus.Bonus_ID,
Customer_Bonus.Amount,
(SELECT
SUM(Customer_Bonus_to_Invoice.Amount)
FROM Customer_Bonus_to_Invoice
WHERE Customer_Bonus_to_Invoice.Bonus_ID = Customer_Bonus.Bonus_ID)
AS 'sum of used bonus'
FROM
Customer_Bonus
Customer_Mapping
Customer_Bonus_to_Invoice
WHERE
Customer_Bonus.Customer_ID = Customer_Mapping.Customer_ID
这是 JOIN 的工作吗?
给你:
SELECT CM.CUSTOMER_ID,
CM.NAME ,
CB.Bonus_ID,
cb.Amount,
SUM(cbi.Amount)
FROM CUSTOMER_MAPPING CM
INNER JOIN CUSTOMER_BONUS CB
ON CM.CUSTOMER_ID=CB.CUSTOMER_ID
INNER JOIN CUSTOMER_BONUS_TO_INVOICE CBI
ON cbi.Bonus_ID=cb.Bonus_ID
GROUP BY CM.CUSTOMER_ID,
CM.NAME,
CB.BONUS_ID,
cb.Amount;
试试这个:
SELECT t1.Customer_ID,t1.Name,sum(t2.Amount) as total_sum_of_bonus,sum(t3.Amount) as sum_of_used_bonus FROM Customer_Mapping as t1
LEFT JOIN Customer_Bonus as t2 on t1.Customer_ID=t2.Customer_ID
LEFT JOIN Customer_Bonus_to_Invoice as t3 on t2.Bonus_ID=t3.Bonus_ID
GROUP BY t1.Customer_ID,t1.Name,t3.Bonus_ID
我是 SQL 的新手,从几天前开始我的第一步。但要知道我已经到了死角。如果你愿意帮助我,那就太好了。
这些是必需的表格:
Table: Customer_Bonus
Bonus_ID、Customer_ID、金额
301, 100215, 100
302, 100924, 50
...
Table: Customer_Mapping
Customer_ID, 姓名, Adress_ID
100215, 美国能源部, 8203351
100924,Al Capone 服务有限公司,849215
...
Table: Customer_Bonus_to_Invoice
Invoice_IDNR、Bonus_ID、金额
216523, 301, 10
...
244854, 302, 10
...
284111, 301, 10
...
299569, 302, 20
...
316017, 302, 10
...
我要回答的问题:如何得到所有已用红利的总和?
这就是我想要的
Customer_ID,姓名,Bonus_ID,奖金总额,已用奖金总额
100215,美国能源部,301、100、20
100924, Al Capone 服务有限公司, 302, 50, 40
...
这是我一直在尝试的
SELECT
Customer_Mapping.Customer_ID
Customer_Mapping.Name,
Customer_Bonus.Bonus_ID,
Customer_Bonus.Amount,
(SELECT
SUM(Customer_Bonus_to_Invoice.Amount)
FROM Customer_Bonus_to_Invoice
WHERE Customer_Bonus_to_Invoice.Bonus_ID = Customer_Bonus.Bonus_ID)
AS 'sum of used bonus'
FROM
Customer_Bonus
Customer_Mapping
Customer_Bonus_to_Invoice
WHERE
Customer_Bonus.Customer_ID = Customer_Mapping.Customer_ID
这是 JOIN 的工作吗?
给你:
SELECT CM.CUSTOMER_ID,
CM.NAME ,
CB.Bonus_ID,
cb.Amount,
SUM(cbi.Amount)
FROM CUSTOMER_MAPPING CM
INNER JOIN CUSTOMER_BONUS CB
ON CM.CUSTOMER_ID=CB.CUSTOMER_ID
INNER JOIN CUSTOMER_BONUS_TO_INVOICE CBI
ON cbi.Bonus_ID=cb.Bonus_ID
GROUP BY CM.CUSTOMER_ID,
CM.NAME,
CB.BONUS_ID,
cb.Amount;
试试这个:
SELECT t1.Customer_ID,t1.Name,sum(t2.Amount) as total_sum_of_bonus,sum(t3.Amount) as sum_of_used_bonus FROM Customer_Mapping as t1
LEFT JOIN Customer_Bonus as t2 on t1.Customer_ID=t2.Customer_ID
LEFT JOIN Customer_Bonus_to_Invoice as t3 on t2.Bonus_ID=t3.Bonus_ID
GROUP BY t1.Customer_ID,t1.Name,t3.Bonus_ID