首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >where子句中聚合函数的SQL问题

where子句中聚合函数的SQL问题
EN

Stack Overflow用户
提问于 2010-11-03 23:52:22
回答 4查看 10.7K关注 0票数 6

我正在解决这个SQL问题:

显示任何收费金额和实际金额不同的采购订单。通过显示采购订单号、每个采购订单的POAmount、实际金额(通过将订单中所有项目的价格相加计算得出)以及两者之间的差异来显示这一点。对结果进行排序,首先显示差异最大的结果。

在运行下面的sql语句时,我得到了以下代码:

错误代码-1,SQL状态42903:聚合函数的使用无效。

代码语言:javascript
运行
AI代码解释
复制
select 
  purchaseorder.ponum, 
  purchaseorder.amount, 
  sum(poitems.quantity*poitems.unitprice), 
  purchaseorder.amount-sum(poitems.quantity*poitems.unitprice)
from  purchaseorder, poitems
where 
  purchaseorder.ponum = poitems.ponum 
    and purchaseorder.amount!=sum(poitems.quantity*poitems.unitprice)
group by 
  purchaseorder.ponum, 
  purchaseorder.amount

我想这是因为我在where子句中使用了聚合函数。

我如何解决这个问题?

谢谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-04 00:44:13

以下是对我起作用的方法。谢谢你们!

代码语言:javascript
运行
AI代码解释
复制
select purchaseorder.ponum,
   purchaseorder.amount,
   sum(poitems.quantity*poitems.unitprice) as actual,
   purchaseorder.amount - sum(poitems.quantity*poitems.unitprice) as "diff"
FROM      purchaseorder
JOIN      poitems ON (purchaseorder.ponum = poitems.ponum)
GROUP BY  purchaseorder.ponum, purchaseorder.amount
HAVING    purchaseorder.amount != sum(poitems.quantity * poitems.unitprice)
order by "diff" desc
票数 0
EN

Stack Overflow用户

发布于 2010-11-03 23:55:44

试试这个:

代码语言:javascript
运行
AI代码解释
复制
select 
  purchaseorder.ponum, 
  purchaseorder.amount, 
  sum(poitems.quantity*poitems.unitprice),   
  purchaseorder.amount-sum(poitems.quantity*poitems.unitprice) 
from  purchaseorder, poitems 
where 
  purchaseorder.ponum = poitems.ponum 
group by 
  purchaseorder.ponum, 
  purchaseorder.amount 
having  
  purchaseorder.amount!=sum(poitems.quantity*poitems.unitprice)
票数 5
EN

Stack Overflow用户

发布于 2010-11-03 23:56:40

您不能在where子句中包含聚合-这就是having的用途-更改为

代码语言:javascript
运行
AI代码解释
复制
select purchaseorder.ponum,
       purchaseorder.amount,
       sum(poitems.quantity*poitems.unitprice) as actual,
       purchaseorder.amount - sum(poitems.quantity*poitems.unitprice) as diff
from  purchaseorder,
      poitems
where purchaseorder.ponum = poitems.ponum
group by purchaseorder.ponum,
         purchaseorder.diff
having diff != 0
order by ABS(diff) desc
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4092724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文