Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
01-22-2021 04:00 PM
I have a program that expects a very simple output from Neo4j in the form of m,d,p
so this statement works fine.
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN m, d, p
But I have a situation where I need to display that information for each unique occurance of compileunit. I am trying to build one that uses a distinct directive (e.g. distinct (p.compileunit)) but I cannot figure out how to embed it so I maintain the output (m,d,p) the program is expecting.
Thanks
Solved! Go to Solution.
01-22-2021 11:34 PM
First you have to move the p element as your first grouping key, like this:
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN p.compileunit,d,m
After you have to put the operator DISTINCT like this
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN DISTINCT p.compileunit,d,m
And finally, you have to aggregate d and m as there are more than one for a distinct p.compileunit and so they can appear on a single row. If you don't DISTINCT operator is useless and will be ignore by Neo4j.
When you RETURN your query result, do not forget that there is only 2 dimensions in a RETURN clause table unlike Neo4j where this is an unlimited number of connections and so dimensions.
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN DISTINCT p.compileunit,collect(d),collect(m)
There is a lot of ways to aggregate your data it's up to you but if you want one single row per p.compileunit you have to do it.
01-22-2021 11:34 PM
First you have to move the p element as your first grouping key, like this:
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN p.compileunit,d,m
After you have to put the operator DISTINCT like this
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN DISTINCT p.compileunit,d,m
And finally, you have to aggregate d and m as there are more than one for a distinct p.compileunit and so they can appear on a single row. If you don't DISTINCT operator is useless and will be ignore by Neo4j.
When you RETURN your query result, do not forget that there is only 2 dimensions in a RETURN clause table unlike Neo4j where this is an unlimited number of connections and so dimensions.
MATCH (p:ProgNode {compileunit:'Way-Duy_User-Task-Manager', release:2})-[d:RUNS]->(m) RETURN DISTINCT p.compileunit,collect(d),collect(m)
There is a lot of ways to aggregate your data it's up to you but if you want one single row per p.compileunit you have to do it.
01-24-2021 08:30 PM
Thank you. That made sense and worked. Thanks again
All the sessions of the conference are now available online