2016-12-20 16 views
0

このMySQLクエリを受け取り、Neo4jのCypher言語で記述しようとしています。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 

サイファークエリ(今のところ)

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

私の問題は、試合は順番が複数、複数の寄付の製品を持っている場合ので、私は信じて、重複注文結果を返しているということですノードは同じ順序で返されます。

私は基本的に少なくとも1つの寄付製品を持っているすべての注文を取得しようとしています。次に、注文に寄付された商品がいくつあるかを返し、平均注文額はそれらの注文のものを返します。

誰でもこのクエリに関するアドバイスをいただけますか?前もって感謝します!

答えて

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

関連する問題