如何在SQL中合并两个表并对具有相同ID的值求和?
我是新来的SQL抱歉,如果这个问题最终变得微不足道 我有两张桌子: 表1“客户”:如何在SQL中合并两个表并对具有相同ID的值求和?,sql,sqlite,Sql,Sqlite,我是新来的SQL抱歉,如果这个问题最终变得微不足道 我有两张桌子: 表1“客户”: CREATE TABLE customer (ID, Name, Surname); INSERT INTO customer (ID, Name, Surname) VALUES (1, 'Smith', 'Hulk'), (2, 'Jake', 'Brook'), (3, 'Vladimir', 'Computin'), (4, 'Joe', 'Door'); CREATE TABLE pay
CREATE TABLE customer (ID, Name, Surname);
INSERT INTO customer (ID, Name, Surname)
VALUES (1, 'Smith', 'Hulk'),
(2, 'Jake', 'Brook'),
(3, 'Vladimir', 'Computin'),
(4, 'Joe', 'Door');
CREATE TABLE payment (payment_id, customer_id, payment_date, payment_amount);
INSERT INTO payment (payment_id, customer_id, payment_date, payment_amount)
VALUES (1, 1, "11/09/2011", 100),
(2, 2, "15/10/2013", 50),
(3, 4, "2/1/2011", 30),
(4, 3, "12/09/2011", 200),
(5, 2, "15/10/2013", 200),
(6, 3, "2/1/2011", 10),
(7, 1, "11/09/2011", 120),
(8, 4, "15/10/2013", 100);
CREATE TABLE payment (Name, Surname, total_payments);
INSERT INTO payment (Name, Surname, total_payments)
VALUES ('Smith', 'Hulk',220),
('Jake', 'Brook', 250),
('Vladimir', 'Computin', 210),
('Joe', 'Door', 130)
SELECT payments.ID, sum(payments.payment_amount)
FROM payments
GROUP BY payments.ID
表2“付款”:
CREATE TABLE customer (ID, Name, Surname);
INSERT INTO customer (ID, Name, Surname)
VALUES (1, 'Smith', 'Hulk'),
(2, 'Jake', 'Brook'),
(3, 'Vladimir', 'Computin'),
(4, 'Joe', 'Door');
CREATE TABLE payment (payment_id, customer_id, payment_date, payment_amount);
INSERT INTO payment (payment_id, customer_id, payment_date, payment_amount)
VALUES (1, 1, "11/09/2011", 100),
(2, 2, "15/10/2013", 50),
(3, 4, "2/1/2011", 30),
(4, 3, "12/09/2011", 200),
(5, 2, "15/10/2013", 200),
(6, 3, "2/1/2011", 10),
(7, 1, "11/09/2011", 120),
(8, 4, "15/10/2013", 100);
CREATE TABLE payment (Name, Surname, total_payments);
INSERT INTO payment (Name, Surname, total_payments)
VALUES ('Smith', 'Hulk',220),
('Jake', 'Brook', 250),
('Vladimir', 'Computin', 210),
('Joe', 'Door', 130)
SELECT payments.ID, sum(payments.payment_amount)
FROM payments
GROUP BY payments.ID
所需输出:
CREATE TABLE customer (ID, Name, Surname);
INSERT INTO customer (ID, Name, Surname)
VALUES (1, 'Smith', 'Hulk'),
(2, 'Jake', 'Brook'),
(3, 'Vladimir', 'Computin'),
(4, 'Joe', 'Door');
CREATE TABLE payment (payment_id, customer_id, payment_date, payment_amount);
INSERT INTO payment (payment_id, customer_id, payment_date, payment_amount)
VALUES (1, 1, "11/09/2011", 100),
(2, 2, "15/10/2013", 50),
(3, 4, "2/1/2011", 30),
(4, 3, "12/09/2011", 200),
(5, 2, "15/10/2013", 200),
(6, 3, "2/1/2011", 10),
(7, 1, "11/09/2011", 120),
(8, 4, "15/10/2013", 100);
CREATE TABLE payment (Name, Surname, total_payments);
INSERT INTO payment (Name, Surname, total_payments)
VALUES ('Smith', 'Hulk',220),
('Jake', 'Brook', 250),
('Vladimir', 'Computin', 210),
('Joe', 'Door', 130)
SELECT payments.ID, sum(payments.payment_amount)
FROM payments
GROUP BY payments.ID
以下是我尝试过的:
CREATE TABLE customer (ID, Name, Surname);
INSERT INTO customer (ID, Name, Surname)
VALUES (1, 'Smith', 'Hulk'),
(2, 'Jake', 'Brook'),
(3, 'Vladimir', 'Computin'),
(4, 'Joe', 'Door');
CREATE TABLE payment (payment_id, customer_id, payment_date, payment_amount);
INSERT INTO payment (payment_id, customer_id, payment_date, payment_amount)
VALUES (1, 1, "11/09/2011", 100),
(2, 2, "15/10/2013", 50),
(3, 4, "2/1/2011", 30),
(4, 3, "12/09/2011", 200),
(5, 2, "15/10/2013", 200),
(6, 3, "2/1/2011", 10),
(7, 1, "11/09/2011", 120),
(8, 4, "15/10/2013", 100);
CREATE TABLE payment (Name, Surname, total_payments);
INSERT INTO payment (Name, Surname, total_payments)
VALUES ('Smith', 'Hulk',220),
('Jake', 'Brook', 250),
('Vladimir', 'Computin', 210),
('Joe', 'Door', 130)
SELECT payments.ID, sum(payments.payment_amount)
FROM payments
GROUP BY payments.ID
这将对具有相同ID的表“付款”中的条目求和
但是,我不知道如何使用ID,以便在总付款前显示姓名(如所需输出)
任何帮助都将不胜感激 您需要将
客户
的左侧
加入到付款
和聚合:
SELECT c.Name, c.Surname,
COALESCE(SUM(p.payment_amount), 0) payment_amount
FROM customer c LEFT JOIN payment p
ON p.customer_id = c.id
GROUP BY c.ID, c.Name, c.Surname
SELECT c.ID, c.Name, c.SurName, sum(p.payment_amount)
FROM clients c LEFT JOIN
payments p
ON c.id = p.customer_id
GROUP BY c.ID, c.Name, c.SurName;
请参阅。结果:
您需要将
customer
的LEFT
加入到payment
并聚合:
SELECT c.Name, c.Surname,
COALESCE(SUM(p.payment_amount), 0) payment_amount
FROM customer c LEFT JOIN payment p
ON p.customer_id = c.id
GROUP BY c.ID, c.Name, c.Surname
SELECT c.ID, c.Name, c.SurName, sum(p.payment_amount)
FROM clients c LEFT JOIN
payments p
ON c.id = p.customer_id
GROUP BY c.ID, c.Name, c.SurName;
请参阅。结果:
您可能需要
JOIN
将它们引入查询,然后进行适当的聚合:
SELECT c.Name, c.Surname,
COALESCE(SUM(p.payment_amount), 0) payment_amount
FROM customer c LEFT JOIN payment p
ON p.customer_id = c.id
GROUP BY c.ID, c.Name, c.Surname
SELECT c.ID, c.Name, c.SurName, sum(p.payment_amount)
FROM clients c LEFT JOIN
payments p
ON c.id = p.customer_id
GROUP BY c.ID, c.Name, c.SurName;
注意:使用相关子查询通常更快:
SELECT c.*,
(SELECT SUM(p.payment_amount)
FROM payments p
WHERE c.id = p.customer_id
) as total_payments
FROM clients c ;
特别是,这可以有效地使用
付款(客户id、付款金额)的索引您可以需要加入以将其纳入查询,然后进行适当的聚合:
SELECT c.Name, c.Surname,
COALESCE(SUM(p.payment_amount), 0) payment_amount
FROM customer c LEFT JOIN payment p
ON p.customer_id = c.id
GROUP BY c.ID, c.Name, c.Surname
SELECT c.ID, c.Name, c.SurName, sum(p.payment_amount)
FROM clients c LEFT JOIN
payments p
ON c.id = p.customer_id
GROUP BY c.ID, c.Name, c.SurName;
注意:使用相关子查询通常更快:
SELECT c.*,
(SELECT SUM(p.payment_amount)
FROM payments p
WHERE c.id = p.customer_id
) as total_payments
FROM clients c ;
特别是,这可以有效地使用付款索引(客户id、付款金额)
尝试:
select c.Name, c.Surname, SUM(p.payment_amount)
from Payments as p, Clients as c
where p.customerID = c.ID
group by c.Name, c.Surname
我想它会起作用的试试:
select c.Name, c.Surname, SUM(p.payment_amount)
from Payments as p, Clients as c
where p.customerID = c.ID
group by c.Name, c.Surname
我想它会起作用的你需要先把两张桌子连在一起。您需要找到表之间的“关系”,以便能够与付款的客户一起汇总付款。在开始将GROUPBY子句应用于查询之前,首先编写连接以关联数据。在这种情况下,您可以通过客户连接表。您需要首先将两个表连接在一起。您需要找到表之间的“关系”,以便能够与付款的客户一起汇总付款。在开始将GROUPBY子句应用于查询之前,首先编写连接以关联数据。在这种情况下,您可以通过客户加入您的表格。\u id感谢您的回复!从技术上讲,它是有效的,但由于某种原因,它改变了罗尔斯的顺序/谢谢你的回复!从技术上讲,它是有效的,但由于某种原因,它改变了罗尔斯的顺序/谢谢你的回复,它工作得很好!谢谢你让我知道这件事!!伟大的资源!很遗憾,我只能接受一个答案。@Geom你接受最新答案有什么原因吗?没有技术原因。这只是奥卡姆的剃须刀。不知何故,最简单的解决方案总是吸引人。不幸的是,我还不熟悉“COALESCE”,所以我更好地理解了其他解决方案中的情况。我希望有一种方法可以接受这两个答案,因为这两个答案都给了我很多帮助@Geom…不熟悉“合并”。。。那你应该查一下。您需要coalesce(),以防客户没有任何付款,因此您得到的结果是0,而不是NULL。我会的,谢谢!谢谢你的回复,它工作得很好!谢谢你让我知道这件事!!伟大的资源!很遗憾,我只能接受一个答案。@Geom你接受最新答案有什么原因吗?没有技术原因。这只是奥卡姆的剃须刀。不知何故,最简单的解决方案总是吸引人。不幸的是,我还不熟悉“COALESCE”,所以我更好地理解了其他解决方案中的情况。我希望有一种方法可以接受这两个答案,因为这两个答案都给了我很多帮助@Geom…不熟悉“合并”。。。那你应该查一下。您需要coalesce(),以防客户没有任何付款,因此您得到的结果是0,而不是NULL。我会的,谢谢!非常感谢。这正是我要找的!非常感谢。这正是我要找的!