함수
집계
집계 데이터를 계산하기 위해 Cypher는 집계 기능을 제공합니다.
개수(Count)
count 함수는 결과 행의 개수를 반환합니다. count 함수는 정점, 간선의 개수 또는 속성의 개수를 출력할 수 있으며, 별칭을 부여할 수도 있습니다.
예제
MATCH (v:person)
RETURN count(v);
MATCH (v:person)-[k:knows]->(p)
RETURN count(*);
MATCH (v:person)
RETURN count(v.name) AS CNT;
합계(Sum)
sum 함수는 숫자 값의 합계를 반환합니다. 숫자 값의 합계이므로 속성을 캐스팅해야 합니다.
예제
MATCH (v:person)
RETURN sum(v.age::int);
평균(Average)
avg 함수는 숫자 값의 평균을 반환합니다. 숫자 값의 합계이므로 속성을 캐스팅해야 합니다.
예제
MATCH (v:person)
RETURN avg(v.age::float);
최솟값과 최댓값(Minimum and Maximum)
min 함수는 숫자 값 중 가장 작은 값을 반환하고, max 함수는 가장 큰 값을 반환합니다.
예제
MATCH (v:person)
RETURN min(v.age);
MATCH (v:person)
RETURN max(v.age);
표준 편차(Standard Deviation)
stdDev 함수는 표준 편차를 반환하는 함수입니다. stdDev 함수는 표본 모집단의 표준 편차를 반환하며 속성을 캐스팅해야 합니다.
예제
MATCH (v:person)
RETURN stdDev(v.age::float);
술어
all( )
주어진 술어가 리스트의 모든 요소에 대해 참인지 검사합니다.
구문
all(var IN list WHERE predicate)
인자
var: 리스트의 각 요소를 나타내는 변수입니다.
list: 평가할 컬렉션입니다.
predicate: 각 요소에 적용되는 불리언 표현식입니다.
반환 타입
boolean: 모든 요소에 대해 술어가 참이면 true, 그렇지 않으면 false입니다.
예제
-- Check if all numbers are greater than 10
RETURN all(x IN [11, 192, 13] WHERE x > 10);
결과
all
-----
t
any( )
술어가 리스트의 적어도 하나의 요소에 대해 참인지 검사합니다.
구문
any(var IN list WHERE predicate)
인자
var: 리스트의 각 요소를 나타내는 변수입니다.
list: 평가할 컬렉션입니다.
predicate: 각 요소에 적용되는 불리언 표현식입니다.
반환 타입
boolean: 어느 한 요소에 대해서라도 술어가 참이면 true, 그렇지 않으면 false입니다.
예제
-- Check if any number is greater than 15
RETURN any(x IN [9, 12, 16] WHERE x > 15);
결과
any
-----
t
none( )
리스트의 어떤 요소도 술어를 만족하지 않는지 검사합니다.
구문
none(var IN list WHERE predicate)
인자
var: 리스트의 각 요소를 나타내는 변수입니다.
list: 평가할 컬렉션입니다.
predicate: 각 요소에 적용되는 불리언 표현식입니다.
반환 타입
boolean: 어떤 요소도 조건을 만족하지 않으면 true, 적어도 하나의 요소가 만족하면 false입니다.
예제
-- Check if none of the numbers are negative
RETURN none(x IN [5, 11, 23] WHERE x < 0);
결과
none
------
t
single( )
리스트에서 정확히 하나의 요소가 술어를 만족하는지 검사합니다.
구문
single(var IN list WHERE predicate)
인자
var: 리스트의 각 요소를 나타내는 변수입니다.
list: 평가할 컬렉션입니다.
predicate: 각 요소에 적용되는 불리언 표현식입니다.
반환 타입
boolean: 정확히 하나의 요소가 일치하면 true, 그렇지 않으면 false입니다.
예제
-- Check if exactly one number is even
RETURN single(x IN [3, 6, 7] WHERE x % 2 = 0);
결과
single
--------
t
스칼라
size( )
size 함수는 인자로 지정된 패턴의 개수를 반환합니다. 이는 전체 패턴에 변수를 할당하고 그 변수를 인자로 받는 count 함수의 결과와 동일합니다.
예제
MATCH (a:person {name: 'Jack'})
RETURN size((a)-[]->());
MATCH p=(a:person {name: 'Jack'})-[]->()
RETURN count(p);
length( )
length 함수는 문자열 또는 경로의 길이를 반환합니다. 인자가 문자열의 문자나 문자열 타입으로 지정되면, 문자열의 문자 개수가 반환됩니다.
예제
RETURN length('string');
MATCH (a:person)
WHERE length(a.name) > 4
RETURN a.name;
리스트
nodes()
nodes 함수는 인자로 전달된 경로에 있는 정점들을 반환합니다. nodes 함수에 인자를 전달할 때는 주의가 필요합니다. MATCH 절로 패턴과 일치하는 경로를 찾고, 변수를 할당한 다음, 그 변수를 인자로 전달합니다. 경로 자체를 nodes 함수의 인자로 전달할 수는 없으며, 항상 변수로 전달해야 합니다. length 함수와 함께 사용하면 경로에 있는 정점의 개수를 구할 수 있습니다.
예제
MATCH p=(a)-[]->()-[]->(b)
WHERE a.name = 'Jack' and b.name = 'Rachel'
RETURN nodes(p);
RETURN nodes( ({name: 'Jack'})-[]->()-[]->({name: 'Rachel'}) ); (X)
MATCH p=(a)-[]->()-[]->(b)
WHERE a.name = 'Jack' and b.name = 'Rachel'
RETURN length(nodes(p));
relationships()
relationships 함수는 인자로 전달된 경로에 존재하는 간선들을 반환합니다. relationships 함수에 인자를 전달할 때는 주의가 필요합니다. MATCH 절로 패턴과 일치하는 경로를 찾고, 변수를 할당한 다음, 그 변수를 인자로 전달합니다. 경로 자체를 relationships 함수의 인자로 전달할 수는 없으며, 항상 변수로 전달해야 합니다. count 함수와 함께 사용하면 경로에 있는 간선의 개수를 구할 수 있습니다.
예제
MATCH p=(a)-[]->()-[]->(b)
WHERE a.name = 'Jack' and b.name = 'Rachel'
RETURN relationships(p);
RETURN relationships( ({name: 'Jack'})-[]->()-[]->({name: 'Rachel'}) ); (X)
MATCH p=(a)-[]->()-[]->(b)
WHERE a.name = 'Jack' and b.name = 'Rachel'
RETURN count(relationships(p));
label()
label 함수는 인자로 전달된 정점의 vlabel을 반환합니다. 해당 정점의 vlabel이 다른 vlabel을 상속하는 경우, 부모 vlabel도 함께 반환합니다. label 함수에 인자를 전달할 때는 주의가 필요합니다. MATCH 절로 패턴과 일치하는 정점을 찾고, 변수를 할당한 다음, 그 변수를 인자로 전달합니다. 정점 자체를 label 함수의 인자로 전달할 수는 없으며, 항상 변수로 전달해야 합니다.
예제
MATCH (a)
WHERE a.name='Jack'
RETURN label(a);
RETURN label(({name: 'Jack'})); (X)
type()
type 함수는 인자로 전달된 간선의 elabel을 반환합니다. 해당 간선의 elabel이 다른 elabel을 상속하는 경우, 부모 elabel도 함께 반환합니다. type 함수에 인자를 전달할 때는 주의가 필요합니다. MATCH 절로 패턴과 일치하는 간선을 찾고, 변수를 할당한 다음, 그 변수를 인자로 전달합니다. 간선 자체를 type 함수의 인자로 전달할 수는 없으며, 항상 변수로 전달해야 합니다.
예제
MATCH ({name: 'Jack'})-[r]->({name:'Emily'})
RETURN type(r);
RETURN type(({name: 'Jack'})-[r]->({name:'Emily'})); (X)
start_id()
주어진 간선의 시작(소스) 정점의 식별자를 반환합니다.
구문
start_id(edge)
인자
edge: 소스 정점 ID를 가져올 간선 표현식입니다.
반환 타입
graphid: 소스 정점의 내부 식별자입니다.
예제
-- Retrieve source vertex IDs of all edges
MATCH ()-[e]->()
RETURN start_id(e);
결과
start_id
----------
3.1
3.2
end_id()
주어진 간선의 끝(타깃) 정점의 식별자를 반환합니다.
구문
end_id(edge)
인자
edge: 타깃 정점 ID를 가져올 간선 표현식입니다.
반환 타입
graphid: 타깃 정점의 내부 식별자입니다.
예제
-- Retrieve target vertex IDs of all edges
MATCH ()-[e]->()
RETURN end_id(e);
결과
end_id
--------
5.10
5.34
경로
shortestpath()
두 정점 사이의 단일 최단 경로를 찾습니다. 여러 개의 최단 경로가 존재하는 경우, 임의의 한 경로가 반환됩니다.
구문
shortestpath(path_pattern)
인자
path_pattern: 두 노드 사이의 Cypher 경로 표현식으로, 방향과 가변 길이 홉을 선택적으로 포함할 수 있습니다.
반환 타입
path: 그래프 경로 객체 형태의 최단 경로입니다.
예제
-- Find the shortest path between person 3 and 5
MATCH (p:person {id: 3}), (f:person {id: 5})
RETURN nodes(shortestpath((p)-[:knows*]->(f))) AS ids;
결과
ids
---------
{3,4,5}
allshortestpaths()
두 정점 사이에서 동일한 최소 길이를 갖는 모든 최단 경로를 찾습니다.
구문
allshortestpaths(path_pattern)
인자
path_pattern: 두 노드 사이의 Cypher 경로 표현식으로, 방향과 가변 길이 홉을 선택적으로 포함할 수 있습니다.
반환 타입
setof path: 두 정점 사이의 모든 최단 경로의 집합입니다.
예제
-- Count all shortest paths between person 1 and 5
MATCH (p:person {id: 1}), (f:person {id: 5})
RETURN length(allshortestpaths((p)-[:knows*]-(f))) AS cnt;
결과
cnt
-----
2
dijkstra()
dijkstra() 함수는 다익스트라 알고리즘을 사용하여 그래프에서 두 정점 사이의 최단 경로를 계산합니다. 이 함수는 총 가중치가 최소가 되는 경로를 찾으며, 가중치는 간선의 속성으로 정의됩니다.
구문
dijkstra(pattern, weight)
dijkstra(pattern, weight, qual)
dijkstra(pattern, weight, LIMIT count)
dijkstra(pattern, weight, qual, LIMIT count)
인자
path_pattern: Cypher 경로 체인입니다. 예: (a)-[e:REL]->(b).
weight_expr: 순회 비용을 결정하는 간선 속성 또는 표현식입니다(예: e.weight).
qual (선택): 간선에 대한 불리언 필터입니다(예: e.weight >= 5).
LIMIT count (선택): 반환되는 경로의 개수를 제한합니다.
반환 타입
변수에 할당된 경우 path입니다(예: p = dijkstra(…)).
할당 형태로 반환되는 경우 튜플 (path, cost)입니다((p, x) = dijkstra(…)).
예제 1
-- Basic weighted shortest path
MATCH (v1:v {id: 0}), (v2:v {id: 3}),
p = dijkstra((v1)-[e:e]->(v2), e.weight)
RETURN nodes(p);
결과
nodes
---------
{0,4,6,3}
예제 2
-- Weighted shortest path with condition
MATCH (v1:v {id: 0}), (v2:v {id: 3}),
p = dijkstra((v1)-[e:e]->(v2), e.weight, e.weight >= 5)
RETURN nodes(p);
결과
nodes
---------
{0,1,5,3}
예제 3
-- Return path and total cost with LIMIT
MATCH (v1:v {id: 0}), (v2:v {id: 3}),
(p, x) = dijkstra((v1)-[e:e]->(v2), e.weight, LIMIT 2)
RETURN nodes(p), x;
결과
nodes | x
-----------+-----
{0,4,3} | 14
{0,1,2,3} | 13
수학
숫자 함수
abs()
abs 함수는 인자로 전달된 숫자 값의 절댓값을 반환합니다. 소수나 뺄셈을 인자로 전달할 수 있습니다. MATCH 절을 사용하여 특정 요소를 찾은 다음, 그 요소의 속성 중 숫자 값인 속성들의 뺄셈을 전달할 수 있습니다.
예제
RETURN abs(-3.14);
RETURN abs(20-45);
MATCH (a {name:'Jack'}), (b {name:'Emily'})
RETURN abs(a.age::int-b.age::int);
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);
sign()
sign 함수는 인자로 전달된 숫자 값의 부호를 반환합니다. 전달된 인자가 양수이면 ‘1’, 음수이면 ‘-1’, 0이면 ‘0’을 반환합니다.
예제
RETURN sign(25);
RETURN sign(-19.93);
RETURN sign(0);
로그 함수
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 함수는 인자로 전달된 숫자 값의 제곱근을 반환합니다. sqrt 함수는 음수를 인자로 전달할 수 없습니다.
예제
RETURN sqrt(25);
RETURN sqrt(-16);
삼각 함수
sin()/cos()/tan()
sin 함수는 인자로 전달된 숫자 값의 사인 값을 반환하고, cos 함수는 인자로 전달된 숫자 값의 코사인 값을 반환하며, tan 함수는 인자로 전달된 숫자 값의 탄젠트 값을 반환합니다.
예제
RETURN sin(0.5);
RETURN sin(-1.5);
RETURN cos(0);
RETURN cos(-1);
RETURN tan(0);
RETURN tan(15.2);
cot()
cot 함수는 인자로 전달된 숫자 값의 코탄젠트 값(탄젠트의 역)이고, asin 함수는 인자로 전달된 숫자 값의 아크사인 값(사인의 역)이며, acos 함수는 인자로 전달된 숫자 값의 아크코사인 값(코사인의 역)이고, atan 및 atan2 함수는 인자로 전달된 숫자 값의 아크탄젠트 값(탄젠트의 역)을 반환합니다. asin 및 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 함수는 전달된 인자를 라디안으로 인식하여 도(각도)로 변환해 반환합니다. radians 함수는 전달된 인자를 라디안으로 변환하여 라디안으로 반환합니다.
예제
RETURN pi();
RETURN degrees(12.3);
RETURN degrees(pi());
RETURN radians(180);
문자열
replace()
replace 함수는 첫 번째 인자 안에 두 번째 인자가 있으면 그것을 세 번째 인자로 변경하는 함수입니다.
예제
RETURN replace('ABCDEFG', 'C', 'Z');
RETURN replace('ABCDEFG', 'CD', 'Z');
RETURN replace('ABCDEFG', 'C', 'ZX');
RETURN replace('ABCDEFG', 'CD', 'ZXY');
substring()
substring 함수는 전달된 첫 번째 인자를 두 번째 인자 위치부터 출력합니다. 세 번째 인자는 몇 개의 문자를 출력할지를 나타냅니다. 세 번째 인자가 없거나 첫 번째 인자의 문자 개수보다 크면 끝까지 출력됩니다.
예제
RETURN substring('ABCDEFG', 2);
RETURN substring('ABCDEFG', 2, 3);
RETURN substring('ABCDEFG', 4, 10);
left()/right()
left 함수는 첫 번째 인자를 왼쪽부터 출력하고, right 함수는 오른쪽부터 두 번째 인자만큼의 문자를 출력합니다. 두 번째 인자의 값이 남아 있는 문자 개수보다 크면, 남아 있는 문자 개수만큼 출력됩니다.
예제
RETURN left('AAABBB', 3);
RETURN right('AAABBB', 3);
lTrim()/rTrim()
lTrim 함수는 전달된 인자에서 왼쪽 공백을 제거하고, rTrim 함수는 오른쪽 공백을 제거합니다.
예제
RETURN lTrim(' ABCD ');
RETURN rTrim(' ABCD ');
lower()/upper()
lower 함수는 전달된 모든 인자를 소문자로 변환하는 함수이고, upper 함수는 대문자로 변환하는 함수입니다.
예제
RETURN lower('AbCdeFG');
RETURN upper('AbCdeFG');
reverse()
reverse 함수는 전달된 인자를 뒤집는 함수입니다.
예제
RETURN reverse('ABCDEFG');