繁体   English   中英

在 Postgres 中执行 sql 查询的问题

[英]problem in execution of sql query in Postgres

我想执行此查询,但无法在 where 条件下使用 max(),请帮助我执行此查询:

SELECT AVG(pushing_force) 
from drawing 
where pushing_force > max(drawing_force) 
group by coil_id 
order by coil_id
 ERROR: ERROR: Aggregate functions are not allowed in WHERE<br> LINE 1: ...pushing_force) from drawing where pushing_force > max(drawin... ^

我想计算每个线圈的 push_force 高于最大drawing_force 的平均值。 它不应该从 0 开始计算。例如,如果在线圈 push_force = 80 和 drawing_force =60 中,它应该计算从 60 到 80 的平均推力

尝试这个

SELECT AVG(pushing_force) 
  FROM drawing d1 
 WHERE pushing_force > (
       SELECT max(drawing_force)
         FROM drawing d2 
        WHERE d1.coil_id = d2.coil_id
        )
GROUP BY coil_id
ORDER BY coil_id

类似的方法,但可能更快,看起来像

SELECT AVG(d1.pushing_force) 
  FROM drawing d1, (
       SELECT coil_id, max(drawing_force) as mdrawing_force
         FROM drawing
        GROUP BY coil_id
       ) d2 
 WHERE d1.pushing_force > d2.mdrawing_force
   AND d1.coil_id = d2.coil_id
GROUP BY d1.coil_id
ORDER BY d1.coil_id

尼特什写道:

但需要看到高于最大拉力的平均值

如果您需要高于max(drawing_force)pushing_force平均值,请尝试使用子查询:

SELECT AVG(pushing_force) result
FROM 
(
    SELECT pushing_force, max(drawing_force) OVER()  max_drawing_force
    FROM drawing
) t
WHERE t.pushing_force > t.max_drawing_force

DBFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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