2016-03-25 8 views
1

フォールングは、CASEの式をsignの数学的関数と組み合わせて使用​​して、数学的なminメソッドの明らかな欠如を回避するために書いた作業クエリです。neo4jサイファーの数学的な最大/最小

MATCH (a)-[ar:REL]->(b)<-[br:REL]-(c) 
RETURN CASE sign(ar.integer-br.integer) WHEN 1 THEN sum(br.integer) ELSE sum(ar.integer) END AS integer 
ORDER BY integer DESC 

私は2つの数値を比較すると、最も低いものを(同じは最高のために行うことができる)かかり、その後、すべての最低の結果を合計する必要がありました。これは一般的なmath.minまたはmath.max関数であり、最小または最大統計集計ではありません。

良い方法がありますか?何か不足していますか?

答えて

2

このクエリはあなたの役に立つかもしれません。

MATCH (a)-[ar:REL]->(b)<-[br:REL]-(c) 
WHERE ID(a) > ID(b) 
RETURN b, SUM(
    CASE 
    WHEN ar.integer > br.integer THEN br.integer 
    ELSE ar.integer END) AS integer 
ORDER BY integer DESC 

WHERE句は、(そうでない場合は、あなたの合計は二重の正しい値を持つことになります)重複したマッチを防ぐために使用されます。 baggregation「グループ化キー」)ごとにSUMを計算し、結果を降順でソートします。 (グループ化キーで集計しなかった場合は、合計が1つしかないので、並べ替えは意味をなさないでしょう)。

+0

ありがとう。私はグルーピングキーといくつかの 'どこで'オプションを貼り付け忘れた。ごめんなさい。とにかく、 'RETURN'節に' CASE'を 'sum()'の中に入れても、あなたが言ったようによりきれいで正確です。どうもありがとうございました! –