Neo4j Cypher查询加入和分组结果

时间:2016-12-20 06:14:18

标签: join neo4j cypher distinct average

我正在尝试使用这个MySQL查询并用Neo4j的Cypher语言编写它。

MySQL查询

SELECT COUNT(o.id) as orders, AVG(o.total) as avg FROM Order AS o
  INNER JOIN Product AS p ON o.id = p.orderId
WHERE p.productType = 'donation'
GROUP BY o.id

Cypher Query(到目前为止)

MATCH (o:Order)-[:CONTAINS]->(p:Product)
WHERE p.productType CONTAINS 'donation'
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg;

我的问题是匹配正在返回重复的订单结果,我相信因为如果订单有多个捐赠产品,那么会返回多个节点以获得相同的订单。

基本上我正在尝试获得至少有一个捐赠产品的所有订单。然后,返回订单中有多少订单的捐赠产品以及这些订单的平均订单价值。

有人对此查询有任何建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,我们只需要在返回之前获得不同的订单。

MATCH (o:Order)-[:CONTAINS]->(p:Product)
WHERE p.productType CONTAINS 'donation'
WITH DISTINCT o
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg;