2016-04-08 17 views
-1

içinde başka bir özelliğe sahip olan düğüm özelliklerinin ortalamasını bulma Özellikler "değer" ve "gen adı" olan bir "Gen" Etiket/düğüm türüne sahibim "Özellik içeren Pathway adında ayrı bir Etiket/düğüm türü var"Neo4j Ortak

Tüm farklı genName'lerden geçip Gen'in değerinin ortalamasını Gen adıyla bulmak istiyorum. Tüm Genler'ın farklı satırlar olarak gösterilmesine ihtiyacım var. Akılda tutulması gereken bir çok genname var. t sorguda hepsini isim. Ben belli Yolda içine yapmanız gerekir. Ben çalışıyorlar

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

şimdi bütün gün bunu anlatabildim ve yapabileceğim tek şey, tüm genNames satırlarını almak. Oradan kayboldum.

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

Mabye?

cevap

1

her biri farklı bir gen adı ortalama gen döndüren Bu sorgu:

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

bir agregasyon fonksiyonu (gibi AVG), otomatik olmayan toplanmasını değerleri için ayrı değerleri kullanır kullandığınızda Aynı WITH veya RETURN yan tümcesi (yani, yukarıdaki sorguda sample ve gene.geneName).

Verimlilik için etiketi pathway düğümlerine ekledim, böylece neo4j tüm düğümler yerine yalnızca Pathway düğümlerini tarayarak başlayabilir. Buna ek olarak, creating an index'u :Pathway(pathwayName) numaralı telefondan düşünmelisiniz, böylece yolun araştırması mümkün olduğunca hızlı olacaktır.

+0

Açıklama ve cevap için teşekkürler! Ancak kodu çalıştırırken bana şu hatayı veriyor: AVG (gen.value) sadece sayısal değerleri işleyebilir veya boş olabilir. Ve gen değerlerinin hepsi sayısal (ondalık kesirler). – TJM

+0

Belki de aslında sayısal dizelerdir? Verimlilik için bunları diziler yerine sayı olarak saklamanız gerekir. Ancak, saklanan değerleri değiştiremezseniz, 'AVG (TOFLOAT (genie.value))' yi kullanabilirsiniz. – cybersam

+0

Bu mükemmel, teşekkürler! – TJM