2016-12-24 4 views
2

よろしく、私はサイファークエリに問題があります。Neo4j Cypherは、子供が属性値を持たないノードを見つけます。

MATCH (oi:OrderItem)<-[:CONTAINS]-(o:Order) 
WHERE oi.productSku IN ['600790041f','600790041s','600790061','600791021f','600791021s','600791051f','600791051s','600791061af','600791061as','600791061f','600791061s','600791101','600791111','600792011f','600792011s','600792031f','600792031s','600792041f','600792041s'] 
WITH DISTINCT o 
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg; 

私は何をしようとしていることは上記のSKUのリストから製品のみが含まれているすべての注文を返すことである:ここではこれまでのところ、私のクエリがあります。上記のクエリは、それらのSKUの1つを含む製品を含むすべての注文を私に提供しています。しかし、私はまた、SKUのリストの外に製品を持っている注文を除外する必要があります(私はそれらの注文を望んでいません)。

本質的に、私はこのSKUのリストに製品しかないすべての注文を出して、注文数とそれらの注文の平均注文額を返します。私が立ち往生している部分は、そのSKUのリストの外にも製品を持っている注文を取り除くことです。

+0

テストデータベースを提供できますか?私は今日あなたのためにこれを解決できると確信しています。別の 'WHERE'節を使いたいと思うかもしれません。 – manonthemat

答えて

2

注文ごとにSKUリスト内のアイテムの数を数え、それを注文あたりのアイテムの合計数と比較する必要があります。

MATCH (oi:OrderItem)<-[:CONTAINS]-(o:Order) 
WHERE oi.productSku IN ['600790041f','600790041s','600790061',...] 

// get the total number of sku items per order 
WITH o, count(*) as num_items 

// only return the orders where the number of items in the order 
// is equivalent to the number of sku items matched 
WHERE size((o)-[:CONTAINS]->()) = num_items 
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg; 
+0

ああ。それは理にかなっている。私はSQLの世界から来て、サイファーができることをすべて学んでいます。助けてくれてありがとう! – ryanpitts1

関連する問題