我正在尝试使用这个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;
我的问题是匹配正在返回重复的订单结果,我相信因为如果订单有多个捐赠产品,那么会返回多个节点以获得相同的订单。
基本上我正在尝试获得至少有一个捐赠产品的所有订单。然后,返回订单中有多少订单的捐赠产品以及这些订单的平均订单价值。
有人对此查询有任何建议吗?提前谢谢!
答案 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;