我有三个名为agency
,works
和purchases
的表。并且agency
和purchases
中有works
的外键。每个代理商都为我们工作,这些作品保存在works
表中,并且每个作品都会给出一个点。例如,一个代理商为我们做了200件作品,所以它有200分
每个代理商都可以通过积分购买我们的产品。在purchases
表格中有一个名为price
的字段,如果代理机构购买了它将插入purchases
表中的产品。
我需要一个SQL查询,它可以告诉我每个代理商的作品数量减去购买量的总和!
像:
select count(works.WID)-SUM(purchases.price) where agency.aid='1'
例如:
像这样的代理商:
AID='1' name='FirstAgency'
做一些像:
的作品WID='1' AID='1' Description='Clean the floor'
WID='2' AID='1' Description='Clean the window'
WID='3' AID='1' Description='Clean the floor'
WID='4' AID='1' Description='Clean the window'
WID='5' AID='1' Description='Clean the floor'
WID='6' AID='1' Description='Clean the window'
所以FirstAgency有6分,因为有6行AID =' 1'在Works
表中
和FirstAgency在Purchases
表中购买了产品价格为2的产品:
PID='1' AID='1' Price='2'
所以这个机构现在有6-2 = 4分。我需要一个查询来执行此操作,计算代理点的剩余部分。
答案 0 :(得分:1)
所以问题是你有n个作品和m个购买而你不想加入表格,因为你会突然遇到n * m个记录。
你可以这样做:
select
(select count(*) from works w where w.id_agency = a.id_agency) as count_works,
(select sum(p.price) from purchases p where p.id_agency = a.id_agency) as sum_purchases
from agency a
where a.id_agency = 1;
对于连接也可以这样做,但是你需要一些会使语句模糊的数学运算。我只是为了完整性而展示它'缘故。
select
count(distinct w.id_work) as count_works,
coalesce(sum(p.price),0) / greatest(count(distinct w.id_work),1) as sum_purchases
from agency a
left join works w on w.id_agency = a.id_agency
left join purchases p on p.id_agency = a.id_agency
where a.id_agency = 1;