I would like to compute the UNION of multiple subqueries and sort the result using ORDER BY.
So I'd like to run this query (written in pseudo-Cypher):
(RETURN 2 AS x
UNION
RETURN 1 AS x)
ORDER BY x
And get the following result:
╒═══╕
│x │
╞═══╡
│1 │
├───┤
│2 │
└───┘
Is there a way to do this? As ORDER BY
is always tied to a single WITH
/RETURN
clause, I do not think this is possible, nor can I think of a good workaround.
The Cypher language does not yet support Post-Union processing.
However, as a workaround, you should be able to use the APOC procedure apoc.cypher.run to perform the UNION operation in a "subroutine", and then perform the post-UNION processing in the main Cypher query. For example:
CALL apoc.cypher.run("RETURN 2 AS x UNION RETURN 1 AS x", NULL) YIELD value
RETURN value.x AS x
ORDER BY x;
Update: this is now possible in Neo4j 4.0+ using the CALL {subquery}
construct:
CALL {
RETURN 2 AS x
UNION ALL
RETURN 1 AS x"
}
RETURN x
ORDER BY x;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With