如何在Neo4j中使用Cypher查询GROUP_BY并取平均值

时间:2016-06-17 22:41:32

标签: neo4j cypher

我在图数据库,机场和运营商中创建了2个节点。它与名为'delayed_by'的属性相关联。

    MATCH (origin:origin_airport {name: row.ORIGIN}), 
   (carrier:Carrier {name: row.UNIQUE_CARRIER})
   CREATE (origin)-[:delayed_by {dep_delay: row.avg_dep_delay}]->(carrier)
   ")

此处,origin_airport具有原始机场的名称,Carrier具有运营商的名称。 dep_delay保存每个航班延迟的价值。在这里,我需要按载波进行分组,并使用Neo4j中的密码查询计算每个载波的延迟平均值。以表格格式表示,我的输入文件格式如下所示:

   ORIGIN   UNIQUE_CARRIER  avg_dep_delay
     ABE      DL             15
     ABE      EV             12
     ABQ      DL             14
     ABQ      AS             2
     ABQ      EV             20
     ABQ      AS             6

我希望结果采用以下格式。我需要按UNIQUE_CARRIER进行分组,并获得每个航空公司的出发延误的平均值。

    UNIQUE_CARRIER  avg_dep_delay

         DL           14.5
         EV           16
         AS           4

我不确定对group_by的查询,并取每个组的平均值。使用以下查询时出现语法错误。

MATCH (oa:origin_airport)-[d:delayed_by]->(c:Carrier)
WITH c, AVG(d) As avg
RETURN c.name  AS Carrier, avg
ORDER BY avg DESC
LIMIT 10

1 个答案:

答案 0 :(得分:1)

您需要将属性指定为AVG

MATCH ()-[d:delayed_by]->(c:Carrier)
RETURN c.name  AS Carrier, 
       AVG(toFloat(d.dep_delay)) As avg
    ORDER BY avg DESC
    LIMIT 10