2017-05-25 38 views
0

我想這兩個查詢合併在一起:Neo4j的合併兩個查詢

查詢1(和結果):

MATCH (Professor)-[:liest]->(Vorlesung)-[:wird_gehoert]->(Studenten) 
RETURN Professor.Name, COUNT(Studenten.MatrNr) 

Professor.Name COUNT(Studenten.MatrNr) 
Augustinus 2 
Russel 2 
Sokrates 4 
Kant 4 
Popper 1 

查詢2(以及結果):

MATCH (Professor)-[:liest]->(Vorlesung) 
RETURN Professor.Name, sum(Vorlesung.SWS) 

Name COUNT(Studenten.MatrNr) 
Augustinus 2 
Russel 2 
Kant 4 
Sokrates 4 
Popper 1 

我試試這個:

MATCH (Professor)-[:liest]->(Vorlesung)-[:wird_gehoert]->(Studenten) 
RETURN Name, COUNT(Studenten.MatrNr), sum(Vorlesungen.SWS) 

但我收到錯誤的答案:

Professor.Name COUNT(Studenten.MatrNr) sum(Vorlesung.SWS) 
Augustinus 2 4 
Russel 2 5 
Sokrates 4 14 
Kant 4 16 
Popper 1 2 

我該怎麼做才能將兩個查詢合併在一起?

+1

請看UNION運算符。 – Supamiu

+1

第二個查詢及其結果似乎不匹配。結果顯示'COUNT(Studenten.MatrNr)',但查詢要返回'sum(Vorlesung.SWS)'。你能糾正這個嗎?另外,'Vorlesung.SWS'代表什麼? – cybersam

回答

0

如果您退回比賽的只是結果:

MATCH (Professor)-[:liest]->(Vorlesung)-[:wird_gehoert]->(Studenten) 
RETURN Professor, Vorlesung, Studenten 

你會看到每個行會的教授,講座,並在講座學生的組合。這意味着爲同一位教授進行多次講座的學生將多次出現在該教授的位置(每次單獨一次講座),這可能會讓您的學生數不盡人意,而且您也會有相同的講座,那個講座的學生會拋出你的sum()計算。

爲避免計算重複條目,您需要處理查詢有點不同。這是我最好的猜測,但它有助於瞭解Studenten.MatrNrVorlesung.SWS代表什麼。如果MatrNr旨在爲學生的唯一編號,那麼最好是將不同的學生節點統計爲:

MATCH (Professor)-[:liest]->(Vorlesung)-[:wird_gehoert]->(Studenten) 
// need to aggregate Vorlesung so we get an accurate count of distinct students 
WITH Professor, collect(DISTINCT Vorlesung) as Vorlesungen, count(DISTINCT Studenten) as StudentenCount 
// need to unwind back to rows so we can sum across distinct Vorlesung 
UNWIND Vorlesungen as Vorlesung 
RETURN Professor, sum(Vorlesung.SWS) as swsSum, StudentenCount