繁体   English   中英

带JOIN和按平均分组的SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM