首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择行数减去另一个字段的和

选择行数减去另一个字段的和
EN

Stack Overflow用户
提问于 2014-06-02 11:34:16
回答 1查看 3.8K关注 0票数 0

我有三个表,名为agencyworkspurchasesagencypurchasesworks中有一个外键。每个代理机构都为我们工作,这些作品保存在works表中,并且每做一件作品就会给出一分。例如,一个机构为我们做了200个工作,所以它有200个积分。

每一家代理商都可以按他们的积分购买我们的产品。在purchases表中有一个名为price的字段,如果代理购买产品,它将插入到purchases表中。我需要一个SQL查询,给我每个机构的作品数量减去其购买的总和!

比如:

代码语言:javascript
运行
复制
select count(works.WID)-SUM(purchases.price) where agency.aid='1'

例如:

像这样的机构:

代码语言:javascript
运行
复制
 AID='1' name='FirstAgency'  

做一些工作,比如:

代码语言:javascript
运行
复制
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个点,因为在Works表中有6行AID='1‘

FirstAgency购买了产品价格为2的产品,如Purchases表中所示:

代码语言:javascript
运行
复制
PID='1' AID='1' Price='2'  

所以这个机构现在有6-2=4分了。我需要一个查询来完成这个任务,计算代理点的剩余部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-02 12:03:47

所以问题是,你有n个工作和m购买,你不想加入表,因为你会突然面对n*m记录。

你可以这样做:

代码语言:javascript
运行
复制
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;

这在联接中也是可能的,但是您需要一些数学来混淆语句。为了完整起见,我会展示给你看。

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23993546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档