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子句中使用了聚合函数.
我怎样才能解决这个问题?
谢谢,
试试这个:
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)
这对我有用。多谢你们!
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)