【发布时间】:2020-03-13 21:39:09
【问题描述】:
我想从下表中运行一个查询,得到从执行办公室支付的金额与应付总金额的比率:
CREATE TABLE offices (
name VARCHAR(255),
ID VARCHAR(255),
level VARCHAR(255)
);
INSERT INTO offices (name,ID,level)
VALUES
('chairman', 'ad1', 'admin'),
('MD', 'ad2', 'admin'),
('CEO', 'ad3', 'admin'),
('president', 'ex1', 'exec' ),
('VP', 'ex2', 'exec'),
('GM', 'ex3', 'exec'),
('HOD', 'ex4', 'exec');
CREATE TABLE cheques (
payee VARCHAR(255) ,
officeID VARCHAR(255),
amount INT(),
status VARCHAR(255)
);
INSERT INTO cheques
VALUES ('john', 'ad2', '100', 'paid'),
('john', 'ad3', '50', 'owed'),
('john', 'ex3', '80', 'paid'),
('john', 'ex4', '150', 'owed'),
('john', 'ex1', '35', 'paid'),
('mary', 'ad1', '200', 'paid'),
('mary', 'ad3', '90', 'owed'),
('mary', 'ex2', '110', 'paid'),
('mary', 'ex4', '40', 'owed'),
('mary', 'ex1', '60', 'paid'),
('jane', 'ad1', '75', 'paid'),
('jane', 'ad3', '120', 'paid');
预期结果如下:
data.frame(
payee=c("john","mary"),
totalpaid=c(115,170),
status=c("paid", "paid"),
totalsdue = c(415, 500),
ratio=(0.28, 0.34)
)
我已经能够从以下执行办公室获得总薪水
SELECT c.payee, SUM(c.amount) as totalpaid, c.status
FROM cheques c
JOIN offices o
ON c.officeID = o.ID
WHERE
o.level LIKE '%ex%'
AND
c.status LIKE '%paid%'
GROUP BY payee
总欠款如下
SELECT c.payee, SUM(c.amount) as totalsdue
FROM cheques c
GROUP BY payee
我尝试过的没有成功:
SELECT
c.payee, SUM(c.amount) as totalsdue
totalsdue/totalpaid as ratio
FROM cheques c
WHERE c.payee IN
(SELECT c.payee, SUM(c.amount) as totalpaid, c.status
FROM cheques c
JOIN offices o
ON c.officeID = o.ID
WHERE
o.level LIKE '%ex%'
AND
c.status LIKE '%paid%'
GROUP BY payee )
GROUP BY payee
如何通过单个查询获得预期结果。
【问题讨论】:
-
为什么子查询可能很慢?
-
在研究我的问题时,我遇到了这个在某处提到的线程:stackoverflow.com/questions/14383100/…