在where子句中使用聚合函数的SQL问题

nov*_*rmr 6 sql db2 aggregate-functions

我正在研究这个SQL问题:

显示任何收费金额和实际金额不同的采购订单.通过显示采购订单编号,每个采购订单的POAmount,实际金额(通过添加订单中所有项目的价格计算)以及两者之间的差异来显示此信息.对结果进行排序以首先显示差异最大的结果.

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能解决这个问题?

谢谢,

Jef*_*nby 5

试试这个:

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)
Run Code Online (Sandbox Code Playgroud)


nov*_*rmr 0

这对我有用。多谢你们!

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
Run Code Online (Sandbox Code Playgroud)