有关平均的SQL语句

我的问题是-> 检索每个段的段ID和长度,该段ID和长度大于所有段的平均长度。将表示段长度的列命名为“长度”。

关系:

Highway(code,name,startNodeId,endNodeId)

Segment (code,segId,fromKM,toKM) 

City(ZIP,Name)

Node (nodeID,longitude,latitude,type) 

Exit(nodeId,exitNo,ZIP) 

Intersection(nodeId,name) 

HighwayIntersection(code,nodeId,atKm) 

HighwayExit(code,atKm) 

到目前为止,我得到的是:

SELECT code,segid,fromkm,tokm,tokm - fromkm AS Length    
from segment    
GROUP BY segid,tokm-fromkm    
HAVING  AVG( tokm - fromkm) < tokm - fromkm 

我收到此错误消息:

  

错误:您的查询包含语法错误。   说明:java.sql.SQLException:ORA-00979:不是GROUP BY   表达

任何人都可以说到底是什么问题吗?

XINXIN16666 回答:有关平均的SQL语句

您可以使用窗口功能来实现此目的:

SELECT code,segid,fromkm,tokm,length
FROM
    (
        SELECT code,tokm - fromkm AS Length,AVG(tokm - fromkm) OVER () as AverageLength   
        from segment 
    ) seg
WHERE AverageLength < Length
,

相关子查询似乎是一种合理的方法:

select s.*
from segment s
where s.length > (select avg(s2.length) from segment s2);

认为这将比使用窗口函数快一点,因为不需要“重新分配”每行的平均值。两者都需要对数据进行至少两次扫描(我假设索引将无济于事,因为可能会返回大约一半的行)。

本文链接:https://www.f2er.com/3163396.html

大家都在问