[英]SQL with JOIN and Group By Plus Average
我希望产生提高车间效率的结果。 为此,我需要来自3个不同表JOMAST,JODRTG和INRTGS的数据。 所以我想出了以下查询:
select jomast.fpartno AS 'Part Number',
JODRTG.foperno AS 'OP Number',
JODRTG.fopermemo As ' Description',
JODRTG.fpro_id AS 'Work Center',
jodrtg.fprod_tim AS ' Act. Production Time',
inrtgs.fuprodtime AS 'Est. Prodution Time'
from jodrtg
Left join jomast on jodrtg.fjobno = jomast.fjobno
left join inrtgs on jomast.fpartno = inrtgs.fpartno
现在,我需要做的就是使法案平均化。 生产时间。 然后将有关该零件的所有OP编号简化为零件编号。
当我尝试对Group By JOMAST.fpartno
,出现错误,指出它无法使用并且位于外部列。 如果我在工序编号上进行分组依据,则每个零件的所有工序10将被合并。 这不是期望的结果。
有人可以指出我要达到目标的方向吗?
这听起来像你希望拥有多个行的所有显示相同jodrtg.fpartno
,无不呈现出不同的jodrtg.fprod_tim
,但所有显示的平均值(下同)值jodrtg.fprod_tim
是吗?
如果是这样,请添加:
AVG(jodrtg.fprod_tim) OVER(PARTITION BY jodrtg.fpartno) as avg_for_all_fprod_tim
作为您选择的列列表中的一列。
有关更多信息,您可以在Google PARTITION BY上进行搜索,但可以将其视为对数据执行GROUP BY x,AVG(y)(或总和,最大值等)的指令,然后将每个AVG放入行数据中x所在的行。
从本质上讲,这与编写较小的子查询(SELECT jodrtg.fpartno, avg(jodrtg.fprod_tim) as avg_for_all_frod_tim FROM blah GROUP BY jodrtg.fpartno)
然后将其重新连接到主查询相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.