2016-12-20 2 views
0

발생합니다.Neo4j 사이퍼 쿼리 내가 Neo4j의 사이퍼 언어로 그것을이 MySQL의 쿼리을 쓰기 ​​위해 노력하고 있어요

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 

사이퍼 쿼리 (지금까지)

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

내 문제는 경기가 중복 주문의 결과는, 내가 믿는 반환하는 것입니다 때문에 순서는 여러 후 다수의 기부의 제품이있는 경우 동일한 순서로 노드가 리턴됩니다.

는 기본적으로 나는 적어도 하나의 기부 제품을 모든 주문을 얻기 위해 노력하고있어. 그런 다음, 기부 순서대로 제품과 무엇 평균 주문 값이 그 주문입니다 얼마나 많은 주문을 반환합니다.

사람은이 쿼리에 대한 조언을? 미리 감사드립니다! 당신은 거의 다

답변

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; 
+0

신난다! 그거였다. 나는 여전히 Cypher를 배우면서 WITH 절이라고 생각했지만 구문을 잘 모르겠습니다. 도와 줘서 고마워! – ryanpitts1