함수(Functions)

집계 함수(Aggregate functions)

예제에서 사용할 데이터를 생성합니다.

CREATE (:person {name: 'Elsa', age: 20});
CREATE (:person {name: 'Jason', age: 30});
CREATE (:person {name: 'James', age: 40});
CREATE (:person {name: 'Daniel', age: 50});
  • avg()
    숫자 값의 평균을 반환합니다.

    MATCH (v:person)
    RETURN avg(v.age); 
    
  • collect()
    표현식이 반환한 값을 담은 리스트를 반환합니다. 여러 레코드 또는 값을 하나의 리스트로 병합하여 데이터를 집계합니다.

    MATCH (v:Person)
    RETURN collect(v.age);
    
  • count()
    결과 행의 개수를 출력합니다. 정점과 간선의 개수 또는 속성을 출력할 수 있으며 별칭을 지정할 수 있습니다.

    MATCH (v:person)
    RETURN count(v); 
    
    MATCH (v:person)-[k:knows]->(p)
    RETURN count(*); 
    
    MATCH (v:person)
    RETURN count(v.name) AS CNT;
    
  • min()/max()
    숫자 속성을 입력으로 받아 해당 열의 최솟값/최댓값을 반환합니다.

    MATCH (v:person)
    RETURN max(v.age);
    
    MATCH (v:person)
    RETURN min(v.age);
    
  • stDev()
    표준 편차를 반환합니다. stDev 함수는 표본 집단의 표준 편차를 반환하며 속성을 캐스팅해야 합니다.

    MATCH (v:person)
    RETURN stDev(v.age);
    
  • stDevP()
    표준 편차를 반환합니다. stDevP 함수는 표본 집단의 표준 편차를 반환하며 속성을 캐스팅해야 합니다.

    MATCH (v:person)
    RETURN stDevP(v.age);
    
  • sum()
    숫자 값의 합계를 반환합니다. 숫자 값의 합계이므로 속성을 캐스팅해야 합니다.

    MATCH (v:person)
    RETURN sum(v.age);
    

술어 함수(Predicate functions)

  • all()
    리스트의 모든 요소가 조건을 만족하면 true를 반환합니다.

    RETURN ALL(x in [] WHERE x = 0);
    
  • any()
    리스트의 요소 중 하나 이상이 조건을 만족하면 true를 반환합니다.

    RETURN ANY(x in [0] WHERE x = 0);
    
  • none()
    리스트의 어떤 요소도 조건을 만족하지 않으면 true를 반환합니다.

    RETURN NONE(x in [] WHERE x = 0);
    
  • single()
    리스트에서 단 하나의 요소만 조건을 만족하면 true를 반환합니다.

    RETURN SINGLE(x in [] WHERE x = 0);
    

스칼라 함수(Scalar functions)

  • coalesce()
    리스트에서 null이 아닌 첫 번째 값을 반환합니다.

    CREATE (:person {name: 'Jack', job: 'Teacher'});
    
    MATCH (a)
    WHERE a.name = 'Jack'
    RETURN coalesce(a.age, a.job);
    
  • endNode()
    관계의 마지막 노드를 반환합니다.

    CREATE vlabel Developer;
    CREATE vlabel language;
    CREATE elabel be_good_at;
    CREATE (:Developer {name: 'Jason'})-[:be_good_at]->(:language {name: 'C'});
    CREATE (:Developer {name: 'David'})-[:be_good_at]->(:language {name: 'JAVA'});
    
    MATCH (x:Developer)-[r]-()
    RETURN endNode(r);
    
  • head()
    리스트의 첫 번째 요소를 반환합니다.

    CREATE (:person {name: 'Richard', array: [ 1, 2, 3 ]});
    
    MATCH(a)
    where a.name = 'Richard'
    RETURN a.array, head(a.array);
    
  • id()
    관계 또는 노드의 id를 반환합니다. 인수로 지정된 모든 노드에 대해 노드 id를 반환합니다.

    MATCH (a)
    RETURN id(a);
    
  • last()
    리스트의 마지막 요소를 반환합니다.

    MATCH (a)
    WHERE a.name = 'Richard'
    RETURN a.array, last(a.array);
    
  • length()
    문자열 또는 경로의 길이를 반환합니다. 문자열 또는 문자열 타입의 속성을 인수로 지정하면 문자열의 문자 수를 반환합니다.

    RETURN length('string');
    
    MATCH (a:person)
    WHERE length(a.name) > 4
    RETURN a.name;
    
  • properties()
    인수를 키/값 매핑 리스트로 변환합니다. 인수가 이미 키/값이 매핑된 리스트인 경우 변경 없이 반환됩니다.

    CREATE (p:Person { name: 'Stefan', city: 'Berlin' })
    RETURN properties(p);
    
  • startNode()
    관계의 시작 노드를 반환합니다.

    MATCH (x:Developer)-[r]-()
    RETURN startNode(r);
    
  • toBoolean()
    문자열을 boolean으로 변환합니다.

    RETURN toBoolean('TRUE'), toBoolean('FALSE');
    
  • type()
    인수로 전달된 간선의 elabel을 반환합니다. 간선의 elabel이 다른 elabel을 상속하는 경우 부모 elabel도 함께 반환합니다. type 함수에 인수를 전달할 때는 주의해야 합니다. MATCH 절을 사용하여 패턴에 일치하는 간선을 찾고 변수를 할당한 다음 그 변수를 인수로 전달할 때, 간선 자체를 type 함수의 인수로 전달할 수 없으며 항상 변수로 전달해야 합니다.

    CREATE elabel loves;
    CREATE (:person {name: 'Adam'})-[:loves]->(:person {name: 'Eve'});
    
    MATCH ({name: 'Adam'})-[r]->({name: 'Eve'})
    RETURN type(r);
    

리스트 함수(List functions)

  • keys()
    노드, 관계, 맵의 모든 속성 이름에 대한 문자열을 담은 리스트를 반환합니다.

    MATCH (a)
    WHERE a.name = 'Jack'
    RETURN keys(a);
    
  • labels()
    인수로 전달된 정점의 vlabel을 반환합니다. label 함수에 인수를 전달할 때는 주의해야 합니다. MATCH 절을 사용하여 패턴에 일치하는 정점을 찾고 변수를 할당한 다음 그 변수를 인수로 전달할 때, 정점 자체를 label 함수의 인수로 전달할 수 없으며 항상 변수로 전달해야 합니다.

    MATCH (a)
    WHERE a.name='Jack'
    RETURN labels(a);
    
  • nodes()
    인수로 전달된 경로에 존재하는 정점을 반환합니다. nodes 함수에 인수를 전달할 때는 주의해야 합니다. MATCH 절을 사용하여 패턴에 일치하는 경로를 찾고 변수를 할당한 다음 그 변수를 인수로 전달할 때, 경로 자체를 nodes 함수의 인수로 전달할 수 없으며 항상 변수로 전달해야 합니다. length 함수와 함께 사용하면 경로에 있는 정점의 개수를 구할 수 있습니다.

    MATCH p = (a)-[r]->(b)
    WHERE a.name = 'Adam' and b.name = 'Eve' 
    RETURN nodes(p);
    
    MATCH p = (a)-[r]->(b)
    WHERE a.name = 'Adam' and b.name = 'Eve'
    RETURN length(nodes(p));
    
  • relationships()
    인수로 전달된 경로에 존재하는 간선을 반환합니다. relationships 함수에 인수를 전달할 때는 주의해야 합니다. MATCH 절을 사용하여 패턴에 일치하는 경로를 찾고 변수를 할당한 다음 그 변수를 인수로 전달할 때, 경로 자체를 relationships 함수의 인수로 전달할 수 없으며 항상 변수로 전달해야 합니다. count 함수와 함께 사용하면 경로에 있는 간선의 개수를 구할 수 있습니다.

    MATCH p =  (a)-[r]->(b)
    WHERE a.name = 'Adam' and b.name = 'Eve'
    RETURN relationships(p);
        
    MATCH p =  (a)-[r]->(b)
    WHERE a.name = 'Adam' and b.name = 'Eve'
    RETURN count(relationships(p));
    
  • tail()
    리스트에서 첫 번째 요소를 제외한 모든 요소를 담은 리스트 결과를 반환합니다.

    MATCH (a)
    WHERE a.name = 'Richard'
    RETURN a.array, tail(a.array);
    

수학 함수(Mathematical functions)

숫자(Number)

  • abs()
    인수로 전달된 숫자 값의 절댓값을 반환합니다. 소수 또는 뺄셈 형태로 전달할 수 있습니다. MATCH 절을 사용하여 특정 요소를 찾고, 요소의 속성 중 숫자 값인 속성들의 뺄셈을 전달할 수 있습니다.

    RETURN abs(-3.14);
    
    RETURN abs(20-45);
    
    MATCH (a {name:'Jack'}), (b {name:'Emily'})
    RETURN abs(a.age-b.age);
    
  • ceil(), floor(), round()
    ceil 함수는 인수로 전달된 숫자 값을 소수 첫째 자리에서 올림합니다. floor 함수는 인수로 전달된 숫자 값을 소수 첫째 자리에서 내림합니다. round 함수는 인수로 전달된 숫자 값을 소수 첫째 자리에서 반올림합니다.

    RETURN ceil(3.1);     
    RETURN ceil(1);       
    RETURN ceil(-12.19);
    
    RETURN floor(3.1);
    RETURN floor(1);
    RETURN floor(-12.19);
    
    RETURN round(3.1);
    RETURN round(3.6);
    RETURN round(-12.19);
    RETURN round(-12.79);
    
  • rand()
    0과 1 사이의 임의의 부동 소수점 숫자를 반환합니다.

    RETURN rand();
    
  • sign()
    인수로 전달된 숫자 값의 부호를 반환합니다. 전달된 인수가 양수이면 ‘1’, 음수이면 ‘-1’, 0이면 ‘0’을 반환합니다.

    RETURN sign(25);
    RETURN sign(-19.93);
    RETURN sign(0);
    

로그(Logarithmic)

  • log()
    숫자의 자연 로그를 반환합니다.

    RETURN log(27);
    

    27의 자연 로그가 반환됩니다.

  • log10()
    숫자의 상용 로그(밑 10)를 반환합니다.

    RETURN log10(27);
    

    27의 상용 로그가 반환됩니다.

  • exp()
    exp 함수는 인수로 전달된 숫자 값을 지수로 하여 밑 (e)를 거듭제곱한 값을 반환합니다. 즉, exp(1)은 e^1≒2.71828182845905, exp(2)는 e^2≒7.38905609893065, exp(-1)은 e^-1≒0.367879441171442를 반환합니다.

    RETURN exp(1);
    RETURN exp(2);
    RETURN exp(-1);
    
  • sqrt()
    인수로 전달된 숫자 값의 제곱근을 반환합니다. sqrt 함수는 음수를 인수로 전달할 수 없습니다.

    RETURN sqrt(25);
    

삼각(Trigonometric)

  • sin()/cos()/tan()
    sin, cos, tan 함수는 각각 인수로 전달된 숫자 값의 사인, 코사인, 탄젠트 값을 반환합니다. sin(), cos(), tan()은 값을 라디안으로 출력하며, sind(), cosd(), tand()는 값을 도(degree)로 출력하는 데 사용됩니다.

    RETURN sin(0.5);
    RETURN sin(-1.5);
    
    RETURN cos(0);
    RETURN cos(-1);
    
    RETURN tan(0);
    RETURN tan(15.2);
    
  • cot()/asin()/acos()/atan()/atan2()
    cot 함수는 인수로 전달된 숫자 값의 코탄젠트 값(탄젠트의 역함수)을 반환하고, asin 함수는 인수로 전달된 숫자 값의 아크사인 값(사인의 역함수)을 반환하며, acos 함수는 숫자 값의 아크코사인 값(코사인의 역함수)을 반환합니다. atan, atan2 함수는 인수로 전달된 숫자 값의 아크탄젠트 값(탄젠트의 역함수)을 반환합니다. acos 함수의 인수 범위는 -1과 1 사이의 숫자 값입니다. atan2는 atan 함수를 더 세분화하기 위해 두 개의 인수를 받습니다. 개념적으로 atan2(a, b)는 atan (a/b)와 동일합니다. 그러나 atan(-5)가 atan(-15/3)인지 atan (15/(-3))인지는 명확하지 않습니다. 삼각 함수는 인수가 라디안 값이므로 명확한 구분이 필요합니다. 따라서 atan보다 atan2를 사용하는 것이 더 정확합니다.

    RETURN cot(1.5);
    
    RETURN asin(1);
    
    RETURN acos(0.5);
    
    RETURN atan(-1);
    
    RETURN atan2(-1.5, 1.3);
    
  • pi()/degrees()/radians()
    pi 함수는 원주율을 숫자로 반환합니다. degrees 함수는 라디안으로 전달된 인수를 받아 도(degree)로 반환합니다. radians 함수는 도(degree)로 전달된 인수를 라디안으로 변환합니다.

    RETURN pi();
    
    RETURN degrees(12.3);
    RETURN degrees(pi());
    
    RETURN radians(180);
    

문자열 함수(String functions)

  • replace()
    첫 번째 인수에 두 번째 인수가 포함되어 있으면 두 번째 인수를 세 번째 인수로 치환합니다.

    RETURN replace('ABCDEFG', 'C', 'Z');
    RETURN replace('ABCDEFG', 'CD', 'Z');
    RETURN replace('ABCDEFG', 'C', 'ZX');
    RETURN replace('ABCDEFG', 'CD', 'ZXY');
    
  • substring()
    첫 번째 인수를 n번째 자리부터 출력합니다(n은 두 번째 인수가 나타내는 숫자입니다). 세 번째 인수는 출력할 문자 수를 나타냅니다. 세 번째 인수가 없거나 첫 번째 인수의 문자 수보다 큰 경우 끝까지 출력합니다.

    RETURN substring('ABCDEFG', 2);
    RETURN substring('ABCDEFG', 2, 3);
    RETURN substring('ABCDEFG', 4, 10);
    
  • left()/right()
    left 함수는 첫 번째 인수를 왼쪽부터 출력하고, right 함수는 오른쪽부터 길이 n(n은 두 번째 인수가 나타내는 숫자입니다)까지의 문자를 출력합니다. 두 번째 인수의 값이 남은 문자 수보다 크면 남은 문자 수만큼 출력됩니다.

    RETURN left('AAABBB', 3);
    RETURN right('AAABBB', 3);
    
  • lTrim()/rTrim()
    lTrim 함수는 전달된 인수에서 왼쪽 공백을 모두 제거하고, rTrim 함수는 오른쪽 공백을 모두 제거한 후 출력합니다.

    RETURN lTrim('    ABCD    ');
    RETURN rTrim('    ABCD    ');
    
  • toLower()/toUpper()
    toLower 함수는 전달된 인수를 모두 소문자로 변환하고, toUpper 함수는 대문자로 변환합니다.

    RETURN toLower('AbCdeFG');
    RETURN toUpper('AbCdeFG');
    
  • reverse()
    인수를 역순으로 출력합니다.

    RETURN reverse('ABCDEFG');
    
  • toString()
    정수, 부동 소수점, boolean 값을 문자열로 변환합니다.

    RETURN toString(11.5), toString('already a string'), toString(TRUE);
    
  • trim()
    원본 문자열에서 앞뒤 공백을 제거하여 반환합니다.

    RETURN trim('   hello   ');