2016-04-08 6 views
-1

Ich habe einen "Gen" Label/Knoten Typ mit Eigenschaften "Wert" und "genName" Ich habe einen separaten Label/Knoten Typ namens Pathway mit Eigenschaft "Neo4j Cypher Den Durchschnitt der Knoteneigenschaften finden, die eine andere Eigenschaft gemeinsam haben

Ich möchte durch die verschiedenen Gene-Namen gehen und den Durchschnitt aller Gene mit diesem Gen-Namen finden. Ich brauche alle diese Gene als verschiedene Zeilen. Bedenkt, ich habe eine Menge von Gen-Namen, so kann ich ' t nennen sie alle in der Abfrage. ich muss das in einem bestimmten Weg tun.

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

ich habe versucht, Finde das jetzt den ganzen Tag heraus und alles, was ich tun kann, ist, alle Zeilen von genNames abzurufen. Ich bin von dort verloren.

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

Mabye?

Antwort

1

Diese Abfrage des durchschnittlichen Gen Wert für jeden einzelnen Gen-Namen sollte zurückgeben:

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

Wenn Sie eine Aggregationsfunktion (wie AVG), verwendet es automatisch verschiedene Werte für die nicht aggregieren Werte in das gleiche WITH oder RETURN Klausel (dh sample und gene.geneName in der obigen Abfrage).

Für Effizienz, ich habe auch die Bezeichnung zu den pathway Knoten hinzugefügt, so dass neo4j beginnen kann, indem nur Pathway-Knoten statt aller Knoten scannen. Darüber hinaus sollten Sie creating an index auf :Pathway(pathwayName) betrachten, so dass die Suche nach dem Pathway so schnell wie möglich ist.

+0

Danke für Ihre Erklärung und Antwort! Aber während ich den Code ausführe, habe ich diesen Fehler erhalten: AVG (gen.value) kann nur mit numerischen Werten oder null umgehen. Und die Gen.Werte sind alle numerisch (Dezimalzahlen, um genau zu sein). – TJM

+0

Vielleicht sind sie tatsächlich numerische Zeichenfolgen? Aus Gründen der Effizienz sollten Sie sie als Zahlen statt als Strings speichern. Wenn Sie die gespeicherten Werte jedoch nicht ändern können, können Sie 'AVG (TOFLOAT (genie.value))' 'verwenden. – cybersam

+0

Das ist perfekt, danke! – TJM

Verwandte Themen