2016-04-08 22 views
-1

プロパティ "value"と "geneName"を持つ "Gene"ラベル/ノードタイプがあります Pathwayという名前の別のラベル/Neo4j Cypher共通の別のプロパティを持つノードプロパティの平均を見つける

私はすべての遺伝子名を調べ、その遺伝子名ですべての遺伝子値の平均値を見つけたいと思っています。それらの遺伝子が異なる行として表示されている必要があります。私は遺伝子名が多いので、それらの名前をすべて問合せに入れてください。特定の経路内でこれを実行する必要があります。

MATCH (sample)-[:Measures]->(gene)-[:Part_Of]->(pathway) 
WHERE pathway.pathwayName = 'Pyrimidine metabolism' 
WITH sample, gene, Collect (distinct gene.geneName) AS temp 

今一日中これを理解してください。私ができることは、geneNamesのすべての行を取得することだけです。私はそこから失われている。

RETURN extract(n IN temp | RETURN avg(gene.value)) 

Mabye?

答えて

1

このクエリは、それぞれ別個の遺伝子名の平均遺伝子の値を返さなければならない:

MATCH (sample)-[:Measures]->(gene)-[:Part_Of]->(pathway:Pathway) 
WHERE pathway.pathwayName = 'Pyrimidine metabolism' 
RETURN sample, gene.geneName AS name, AVG(gene.value) AS avg; 

ます(AVGなど)集計関数を使用する場合、それは自動的に非凝集値に対して異なる値を使用し同じWITHまたはRETURN句(上記のクエリではsampleおよびgene.geneName)です。

効率的に、neo4jがすべてのノードではなくPathwayノードだけをスキャンするように、ラベルをpathwayノードに追加しました。さらに、:Pathway(pathwayName)creating an indexを含めると、Pathwayの検索ができるだけ高速になります。

+0

あなたの説明と回答ありがとう!しかし、私はコードを実行している間、それは私にこのエラーを与えている:AVG(gene.value)は、数値またはnullを処理することができます。 gene.valuesはすべて数値です(正確な小数)。 – TJM

+0

実際には数値文字列ですか?効率を上げるために、文字列ではなく数値として格納する必要があります。しかし、保存された値を変更できない場合は、 'AVG(TOFLOAT(genie.value))'を使用できます。 – cybersam

+0

これは完璧です、ありがとう! – TJM

関連する問題