How concatenating selective query results as string in Neo4j?
up vote
0
down vote
favorite
Initial situation
I’ve written a working Cypher query, which returns four distinct quantities.
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
RETURN
amountA, amountB, amountC, amountD;
Target solution
Instead of a four-column table I want to return a single text string now, where all four quantities are concatenated including a descriptive label. However the quantity must only be part of the string, if its amount is greater than zero.
╒════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞════════════════════════════════════════════════════╡
│"amountA: 123456, amountC: 9876543, amountD: 2018" │
└────────────────────────────────────────────────────┘
(Because the value of amountB is 0, it is omitted in the result.)
I use this Cyper query for several millions of rows. Because of a performance impact apprehension I don’t want to create and call a custom plugin.
So, how can I return the quantities as string with Cypher and Neo4j? Can you please give me an advice how to solve this challenge? Many thanks in advance for pointing me into the right direction!
approach to the problem / preliminary result
Cypher statement:
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
WITH
['amountA: ', amountA, ', amountB: ', amountB, ', amountC: ', amountC, ', amountD: ', amountD] AS quantities
RETURN
reduce(result = toString(head(quantities)), n IN tail(quantities) | result + n) AS formattedQuantities;
Result:
╒═════════════════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞═════════════════════════════════════════════════════════════════╡
│"amountA: 123456: 1, amountB: 0, amountC: 9876543, amountD: 2018"│
└─────────────────────────────────────────────────────────────────┘
Still open:
- filtering of amountB because of value 0
text neo4j cypher
add a comment |
up vote
0
down vote
favorite
Initial situation
I’ve written a working Cypher query, which returns four distinct quantities.
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
RETURN
amountA, amountB, amountC, amountD;
Target solution
Instead of a four-column table I want to return a single text string now, where all four quantities are concatenated including a descriptive label. However the quantity must only be part of the string, if its amount is greater than zero.
╒════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞════════════════════════════════════════════════════╡
│"amountA: 123456, amountC: 9876543, amountD: 2018" │
└────────────────────────────────────────────────────┘
(Because the value of amountB is 0, it is omitted in the result.)
I use this Cyper query for several millions of rows. Because of a performance impact apprehension I don’t want to create and call a custom plugin.
So, how can I return the quantities as string with Cypher and Neo4j? Can you please give me an advice how to solve this challenge? Many thanks in advance for pointing me into the right direction!
approach to the problem / preliminary result
Cypher statement:
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
WITH
['amountA: ', amountA, ', amountB: ', amountB, ', amountC: ', amountC, ', amountD: ', amountD] AS quantities
RETURN
reduce(result = toString(head(quantities)), n IN tail(quantities) | result + n) AS formattedQuantities;
Result:
╒═════════════════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞═════════════════════════════════════════════════════════════════╡
│"amountA: 123456: 1, amountB: 0, amountC: 9876543, amountD: 2018"│
└─────────────────────────────────────────────────────────────────┘
Still open:
- filtering of amountB because of value 0
text neo4j cypher
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Initial situation
I’ve written a working Cypher query, which returns four distinct quantities.
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
RETURN
amountA, amountB, amountC, amountD;
Target solution
Instead of a four-column table I want to return a single text string now, where all four quantities are concatenated including a descriptive label. However the quantity must only be part of the string, if its amount is greater than zero.
╒════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞════════════════════════════════════════════════════╡
│"amountA: 123456, amountC: 9876543, amountD: 2018" │
└────────────────────────────────────────────────────┘
(Because the value of amountB is 0, it is omitted in the result.)
I use this Cyper query for several millions of rows. Because of a performance impact apprehension I don’t want to create and call a custom plugin.
So, how can I return the quantities as string with Cypher and Neo4j? Can you please give me an advice how to solve this challenge? Many thanks in advance for pointing me into the right direction!
approach to the problem / preliminary result
Cypher statement:
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
WITH
['amountA: ', amountA, ', amountB: ', amountB, ', amountC: ', amountC, ', amountD: ', amountD] AS quantities
RETURN
reduce(result = toString(head(quantities)), n IN tail(quantities) | result + n) AS formattedQuantities;
Result:
╒═════════════════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞═════════════════════════════════════════════════════════════════╡
│"amountA: 123456: 1, amountB: 0, amountC: 9876543, amountD: 2018"│
└─────────────────────────────────────────────────────────────────┘
Still open:
- filtering of amountB because of value 0
text neo4j cypher
Initial situation
I’ve written a working Cypher query, which returns four distinct quantities.
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
RETURN
amountA, amountB, amountC, amountD;
Target solution
Instead of a four-column table I want to return a single text string now, where all four quantities are concatenated including a descriptive label. However the quantity must only be part of the string, if its amount is greater than zero.
╒════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞════════════════════════════════════════════════════╡
│"amountA: 123456, amountC: 9876543, amountD: 2018" │
└────────────────────────────────────────────────────┘
(Because the value of amountB is 0, it is omitted in the result.)
I use this Cyper query for several millions of rows. Because of a performance impact apprehension I don’t want to create and call a custom plugin.
So, how can I return the quantities as string with Cypher and Neo4j? Can you please give me an advice how to solve this challenge? Many thanks in advance for pointing me into the right direction!
approach to the problem / preliminary result
Cypher statement:
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
WITH
['amountA: ', amountA, ', amountB: ', amountB, ', amountC: ', amountC, ', amountD: ', amountD] AS quantities
RETURN
reduce(result = toString(head(quantities)), n IN tail(quantities) | result + n) AS formattedQuantities;
Result:
╒═════════════════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞═════════════════════════════════════════════════════════════════╡
│"amountA: 123456: 1, amountB: 0, amountC: 9876543, amountD: 2018"│
└─────────────────────────────────────────────────────────────────┘
Still open:
- filtering of amountB because of value 0
text neo4j cypher
text neo4j cypher
edited Nov 22 at 16:51
asked Nov 22 at 15:10
ThirstForKnowledge
578112
578112
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You want to use the FILTER function
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
// Reformat to list
WITH
[{name:'amountA', value:amountA}, {name:'amountB', value:amountB}, {name:'amountC', value:amountC}, {name:'amountD', value:amountD}] AS quantities
// Filter out 0's
WITH filter(x IN quantities WHERE x.value > 0) AS quantities
// Convert list to string
RETURN
reduce(result = quantities[0].name + ": " + quantities[0].value, n IN tail(quantities) | result + ", " + n.name + ": " + n.value) AS formattedQuantities; AS formattedQuantities;
Note that this returns null if all values are 0 (null + string = null)
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You want to use the FILTER function
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
// Reformat to list
WITH
[{name:'amountA', value:amountA}, {name:'amountB', value:amountB}, {name:'amountC', value:amountC}, {name:'amountD', value:amountD}] AS quantities
// Filter out 0's
WITH filter(x IN quantities WHERE x.value > 0) AS quantities
// Convert list to string
RETURN
reduce(result = quantities[0].name + ": " + quantities[0].value, n IN tail(quantities) | result + ", " + n.name + ": " + n.value) AS formattedQuantities; AS formattedQuantities;
Note that this returns null if all values are 0 (null + string = null)
add a comment |
up vote
1
down vote
accepted
You want to use the FILTER function
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
// Reformat to list
WITH
[{name:'amountA', value:amountA}, {name:'amountB', value:amountB}, {name:'amountC', value:amountC}, {name:'amountD', value:amountD}] AS quantities
// Filter out 0's
WITH filter(x IN quantities WHERE x.value > 0) AS quantities
// Convert list to string
RETURN
reduce(result = quantities[0].name + ": " + quantities[0].value, n IN tail(quantities) | result + ", " + n.name + ": " + n.value) AS formattedQuantities; AS formattedQuantities;
Note that this returns null if all values are 0 (null + string = null)
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You want to use the FILTER function
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
// Reformat to list
WITH
[{name:'amountA', value:amountA}, {name:'amountB', value:amountB}, {name:'amountC', value:amountC}, {name:'amountD', value:amountD}] AS quantities
// Filter out 0's
WITH filter(x IN quantities WHERE x.value > 0) AS quantities
// Convert list to string
RETURN
reduce(result = quantities[0].name + ": " + quantities[0].value, n IN tail(quantities) | result + ", " + n.name + ": " + n.value) AS formattedQuantities; AS formattedQuantities;
Note that this returns null if all values are 0 (null + string = null)
You want to use the FILTER function
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
// Reformat to list
WITH
[{name:'amountA', value:amountA}, {name:'amountB', value:amountB}, {name:'amountC', value:amountC}, {name:'amountD', value:amountD}] AS quantities
// Filter out 0's
WITH filter(x IN quantities WHERE x.value > 0) AS quantities
// Convert list to string
RETURN
reduce(result = quantities[0].name + ": " + quantities[0].value, n IN tail(quantities) | result + ", " + n.name + ": " + n.value) AS formattedQuantities; AS formattedQuantities;
Note that this returns null if all values are 0 (null + string = null)
answered Nov 23 at 20:32
Tezra
4,91821042
4,91821042
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53433811%2fhow-concatenating-selective-query-results-as-string-in-neo4j%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown