साइफर में मूल्यों को समूहबद्ध करें और जोड़ें

मैंने neo4j (साइफर) पर यह प्रश्न किया:

match (Person)-[KNOWS]->(Comp)
WHERE Comp.name='EN' OR Comp.name='FR' OR Comp.name='CUI'
RETURN Person.fname,
CASE Comp.name
    WHEN 'EN'
    THEN 5
    WHEN 'FR'
    THEN 3
    WHEN 'CUI'
    THEN 1 
    ELSE 0 END AS Points_Candidat

मेरा परिणाम है:

Yves 3

Yves 1

Alina 3

Alina 1

David 5

David 3

लेकिन मैं अपने परिणाम को समूहित करना चाहता हूं और प्रत्येक व्यक्ति के लिए Points_Candidate को जोड़ना चाहता हूं। मैं इस तरह का जवाब प्राप्त करना चाहता हूं:

Yves 4

Alina 4

David 8

मुझे अपनी क्वेरी को कैसे संशोधित करना है?

0
जोड़ा संपादित
विचारों: 1

1 उत्तर

आप SUM के साथ संख्यात्मक मानों के संग्रह का योग प्राप्त कर सकते हैं, उदाहरण के लिए आप इसे अपने CASE खंड पर चला सकते हैं,

MATCH (Person)-[KNOWS]->(Comp) 
WHERE Comp.name='EN' OR Comp.name='FR' OR Comp.name='CUI' 
RETURN Person.fname, SUM(  
    CASE Comp.name  
        WHEN 'EN'  THEN 5  
        WHEN 'FR'  THEN 3  
        WHEN 'CUI'  THEN 1  
        ELSE 0 
    END 
) AS Points_Candidat

मुझे संदर्भ पता नहीं है, लेकिन मुझे दो मामूली परिवर्तनों के बारे में लगता है जो आपको समकक्ष प्रदान करेंगे लेकिन थोड़ी सी क्वेरी को कम कर देगा: 1) चूंकि WHERE खंड में तीन परीक्षण मान के अलावा समान हैं के लिए परीक्षण किया गया है, आप तीन कोड संयोजन के बजाय मूल्यों के संग्रह के साथ IN ऑपरेटर का उपयोग कर सकते हैं, और 2) क्योंकि तीन <�कोड> केस ... WHEN मान संभावनाओं को समाप्त करते हैं WHERE खंड में क्या बाध्य है, सभी बाध्य नोड्स मामलों में से किसी एक के लिए सत्य परीक्षण करेंगे, इसलिए आपको ELSE की आवश्यकता नहीं है।

MATCH (Person)-[KNOWS]->(Comp) 
WHERE Comp.name IN ['EN' ,'FR','CUI'] 
RETURN Person.fname, SUM(  
    CASE Comp.name  
        WHEN 'EN'  THEN 5  
        WHEN 'FR'  THEN 3  
        WHEN 'CUI'  THEN 1
    END 
) AS Points_Candidat

आप लेबल्स और इंडेक्स का उपयोग करने से भी लाभ उठा सकते हैं, और जब तक कि Comp.name का मान मैप करने के लिए क्वेरी से भिन्न नहीं है, तो आप इसे Comp और <�कोड> वापसी व्यक्ति। fname, SUM (Comp.Points_Candidat) ।

0
जोड़ा