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










share|improve this question




























    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










    share|improve this question


























      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










      share|improve this question















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 22 at 16:51

























      asked Nov 22 at 15:10









      ThirstForKnowledge

      578112




      578112
























          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)






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            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

























            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)






            share|improve this answer

























              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)






              share|improve this answer























                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)






                share|improve this answer












                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)







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 at 20:32









                Tezra

                4,91821042




                4,91821042






























                    draft saved

                    draft discarded




















































                    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.




                    draft saved


                    draft discarded














                    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





















































                    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







                    Popular posts from this blog

                    What visual should I use to simply compare current year value vs last year in Power BI desktop

                    How to ignore python UserWarning in pytest?

                    Alexandru Averescu