求一句sql语句!!!(50分)

  • 主题发起人 主题发起人 gcys
  • 开始时间 开始时间
G

gcys

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大师:
问题如下:

表storage:
字段1:storageid(序号)主关键字
字段2:productid(产品编号)
字段3:species(规格)
字段4:amount(数量)
字段5:price(单价)

现想根据productid(产品编号)对记录进行汇总(group by...),求出同一类产品
的总数量,并求出该产品的平均价格。

谢谢!
 
select 'sum of same kind of product'=sum(amount),'average cost'=avg(price)
from [你的数据Tabel] A
group by A.productid

其中 'sum of same kind of procduct'就是查询的结果,代表同类产品的总数量,
'average cost'就是查询的结果,代表同类产品的平均价格。
 
select sum(amount) as sum_amount, avg(price) as average_price
from storage
where isnull(amount,0)>0 and isnull(price,0)>0
group by productid

增加了判断AMOUNT和PRICE不能为空
 
平均价格怎么理解,是把所有的价格算数平均还是加权平均,
如果是加权平均
平均价格应为: sum(price*amout)/sum(amount)
所以sql为:

select sum(isnull(amount,0))
as sumofamount,
sum(isnull(price,0)*isnull(amount,0))/sum(isnull(amount,0))
as averageofprice
from storage
by productid
 
我同意cytown的意见
 
平均价格应为加权平均,amount和price都不能为0:

select sum(amount) as sum_amount, sum(amount*price)/sum(amount) as average_price
from storage
where isnull(amount,0)>0 and isnull(price,0)>0
group by productid
 
churchill的已经很完善的答案了!
 
条件中使用isnull函数会数据库的优化器无法
使用索引,导致性能太差,应在where clause中
直接使用条件 amount>0 and price>0 ,
在oracle中null值不被selected,否则可再加上
amount is not null and price is not null
 
后退
顶部