问题描述
对于客户名为 Alexander Felix 的每个帐户,计算余额,并返回一个显示每个帐户的帐号、类型和余额的表(提示:使用 UNION)。
DROP DATABASE IF EXISTS Bank;
CREATE DATABASE Bank;
USE Bank;
DROP TABLE IF EXISTS transaction;
DROP TABLE IF EXISTS customer;
DROP TABLE IF EXISTS account;
CREATE TABLE customer (
name VARCHAR(20),sex CHAR(1),ssn CHAR(9) NOT NULL,phone CHAR(15),dob DATE,address VARCHAR(50),PRIMARY KEY(ssn)
);
CREATE TABLE account (
number CHAR(16) UNIQUE NOT NULL,open_date DATE,type CHAR(20),owner_ssn CHAR(9) NOT NULL,PRIMARY KEY(number)
);
CREATE TABLE transaction (
id INT(20) UNIQUE NOT NULL,amount DECIMAL(9,2),tdate DATE,type CHAR(10),account_num CHAR(16),PRIMARY KEY(id)
);
INSERT INTO customer VALUE ('John Adam','M','512432341','(438) 321-2553','1987-11-15',NULL);
INSERT INTO customer VALUE ('Alexander Felix','724432341','(541) 321-8553','1991-05-22',NULL);
INSERT INTO customer VALUE ('Andrew William','861894272','(308) 692-1110','1995-01-04',NULL);
INSERT INTO customer VALUE ('Ana Bert','F','844192241','(203) 932-7000','1982-12-07','23 Boston Post Rd,West Haven,CT 06516');
INSERT INTO account VALUE ('1111222233331441','2018-12-03','Checking','861894272');
INSERT INTO account VALUE ('2111222233332442','2019-01-06','Saving','512432341');
INSERT INTO account VALUE ('3111222233333443','2017-09-22','844192241');
INSERT INTO account VALUE ('4111222233335444','2016-04-11','724432341');
INSERT INTO account VALUE ('5111222233339445','2018-11-05','724432341');
INSERT INTO transaction VALUE (1001,202.50,'2019-08-15','Deposit','5111222233339445');
INSERT INTO transaction VALUE (1002,100.00,'2019-09-21','2111222233332442');
INSERT INTO transaction VALUE (1003,200.00,'2019-09-29','2111222233332442');
INSERT INTO transaction VALUE (1004,50.00,'2111222233332442');
INSERT INTO transaction VALUE (1005,1000.00,'3111222233333443');
INSERT INTO transaction VALUE (1006,-202.50,'2019-08-29','Withdraw','5111222233339445');
INSERT INTO transaction VALUE (1007,'2111222233332442');
INSERT INTO transaction VALUE (1008,'2111222233332442');
INSERT INTO transaction VALUE (1009,-10.00,'2019-09-26','2111222233332442');
INSERT INTO transaction VALUE (1010,'4111222233335444');
INSERT INTO transaction VALUE (1011,320.00,'5111222233339445');
INSERT INTO transaction VALUE (1012,'2019-09-18','4111222233335444');
INSERT INTO transaction VALUE (1013,5000.00,'2019-06-21','1111222233331441');
INSERT INTO transaction VALUE (1014,-100.00,'2019-09-02','1111222233331441');
INSERT INTO transaction VALUE (1015,-200.00,'2019-09-08','1111222233331441');
这是我目前所拥有的:
select number,type,Balance
from account inner join
(select account_num,sum(amount)
as Balance from transaction
where customer.name = 'Alexander Felix');
我非常感谢有关后续步骤以及如何准确计算余额的指导。非常感谢您的任何帮助/评论!
解决方法
试试
<Flex paddingX="1.5rem" direction="column">
<Message username="User A" body="Test Message 1" time="13:39" />
<Message username="User B" body="Test Message 2" time="13:40" />
<Message username="User A" body="Test Message 1" time="13:39" />
<Message username="User B" body="Test Message 2" time="13:40" />
</Flex>
,
喜欢吗?
select a.number,a.type,b.Balance,c.name from account as a
join (select account_num,sum(amount) as Balance from transaction group by account_num) as b on a.number = b.account_num
join (select name,ssn from customer) c on c.ssn = a.owner_ssn
where c.name = 'Alexander Felix';
,
我同意 UNION 在这里完全没有必要,但您可以按照以下方式使用它:
SELECT number,type,SUM(amount) balance
FROM
( SELECT a.number,t.amount
FROM account a
JOIN transaction t
ON t.account_num = a.number
JOIN customer c
ON c.ssn = owner_ssn
WHERE c.name = 'Alexander Felix'
AND t.type = 'Deposit'
UNION ALL
SELECT a.number,t.amount
FROM account a
JOIN transaction t
ON t.account_num = a.number
JOIN customer c
ON c.ssn = owner_ssn
WHERE c.name = 'Alexander Felix'
AND t.type = 'Withdraw'
) x
GROUP
BY number,type;
这里没有 UNION 也是一样...
SELECT a.number,SUM(amount) balance
FROM account a
JOIN transaction t
ON t.account_num = a.number
JOIN customer c
ON c.ssn = owner_ssn
WHERE c.name = 'Alexander Felix'
GROUP
BY a.number,a.type;