请教sql语句高手:关于sql语句的sum()函数的按条件求和! 附详细的背景和原来的方法
公司环境:
1.生产化学药剂,指标有 “产量“(output)和“含硫百分比“(purity)
2.共有四个班组的人员,但每天只上三个班(早上,下午,晚上)
3.每天的每个班的产量直接测出进入数据库,但是每班的“含硫百分比“由于要
化验,并不能都是当天输入,可能会拖到下个月才能进入数据库,但在数据库
中我将还没有真实“含硫百分比“的字段默认为零
4.月累计“含硫百分比“时,对于还没于真实“含硫百分比“的工班,其产量不
计入统计公式
数据库表结构: 日期 | 时间段 | 班组 | 产量 | 含硫率
目的:求 月累计各个班组生产 的 “含硫百分比“
步骤:1.先计算出查询月份各个班组生产的 硫量 = sum( output * purity)
2.查询月份各个班组的总产量 = sum(output)
3.累计“含硫百分比“ = sum(output * purity)/sum(output) * 100
难点:统计各个班组的总产量时,必须是含硫率 >0
传统方法:
/****************************************************************/
SELECT
class, /* 生产班别代码,值域为一,二,三,四*/
sum(purity * output ) as sulphur /* 各个班组的产量中含硫量,此时不用考虑
purity>0 ,因为没有化验出的purity时,其
被默认为零*/
FROM basedata
where date like '2003-05%'
GROUP BY class
SELECT
class, /* 生产班别代码,值域为一,二,三,四*/
sum(output ) as total /* 此时考虑 purity>0 ,对于purity =0,也就
是没有化验数据时,其相应的产量不计入sum
被默认为零*/
FROM basedata
where date like '2003-05%' and purity > 0
GROUP BY class
把以上两个结果按class 进行join后,在相除相应字段,则可以达到目的
/****************************************************************/
问题: 能否在一个SELECT语句中实现上述的统计结果,也就是在含有GROUP BY的
select 语句中,能否实现按条件sum
请各位赐教!