关于 YMatrix
部署数据库
使用数据库
管理集群
最佳实践
高级功能
高级查询
联邦查询
Grafana 监控
备份恢复
灾难恢复
图数据库
管理手册
性能调优
故障诊断
工具指南
系统配置参数
SQL 参考
触发自动聚合的函数。
LOAD 'age';
SET search_path TO ag_catalog;
SELECT create_graph('graph_name');
SELECT * FROM cypher('graph_name', $$
CREATE (a:Person {name: 'A', age: 13}),
(b:Person {name: 'B', age: 33, eyes: "blue"}),
(c:Person {name: 'C', age: 44, eyes: "blue"}),
(d1:Person {name: 'D', eyes: "brown"}),
(d2:Person {name: 'D'}),
(a)-[:KNOWS]->(b),
(a)-[:KNOWS]->(c),
(a)-[:KNOWS]->(d1),
(b)-[:KNOWS]->(d2),
(c)-[:KNOWS]->(d2)
$$) as (a agtype);
min() 返回一组值中的最小值。
语法:min(expression)
返回值:
属性类型或列表,取决于 expression 返回的值。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回包含任意属性类型和列表组合的集合的表达式。 |
注意事项:
min(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (v:Person)
RETURN min(v.age)
$$) as (min_age agtype);
返回属性 age 中所有值的最小值。
结果:
| min_age |
|---|
| 13 |
| 返回 1 行 |
min() 与列表一起使用数据准备:
为了说明以下示例,假设先运行以下三个命令:
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:'d'})
$$) as (result agtype);
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:['a', 'b', 23]})
$$) as (result agtype);
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:[1, 'b', 23]})
$$) as (result agtype);
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (v:min_test)
RETURN min(v.val)
$$) as (min_val agtype);
返回集合中所有值的最小值——在本例中为列表 ['a', 'b', 23]——因为 (i) 两个列表被认为比字符串 "d" 的值更低,(ii) 字符串 "a" 被认为比数值 1 的值更低。
结果:
| min_age |
|---|
| ["a", "b", 23] |
| 返回 1 行 |
max() 返回一组值中的最大值。
语法:max(expression)
返回值:
属性类型或列表,取决于 expression 返回的值。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回包含任意属性类型和列表组合的集合的表达式。 |
注意事项:
max(null) 返回 null。查询:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN max(n.age)
$$) as (max_age agtype);
返回属性 age 中所有值的最大值。
结果:
| max_age |
|---|
| 44 |
| 返回 1 行 |
stDev() 返回给定值在一组数据上的标准差。它使用标准的两遍方法,以 N - 1 作为分母,适用于从总体中抽取样本进行无偏估计。当计算整个总体的标准差时,应使用 stDevP。
语法:stDev(expression)
返回值:
agtype 浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | agtype 数值表达式 |
注意事项:
stDev(null) 返回 0.0(零)。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN stDev(n.age)
$$) as (stdev_age agtype);
返回属性 age 中值的标准差。
结果:
| stdev_age |
|---|
| 15.716233645501712 |
| 返回 1 行 |
stDevP() 返回给定值在一组数据上的标准差。它使用标准的两遍方法,以 N 作为分母,适用于计算整个总体的标准差。当仅计算总体样本的标准差时,应使用 stDev。
语法:stDevP(expression)
返回值:
agtype 浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | agtype 数值表达式 |
注意事项:
stDevP(null) 返回 0.0(零)。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN stDevP(n.age)
$$) as (stdevp_age agtype);
返回属性 age 中值的总体标准差。
结果:
| stdevp_age |
|---|
| 12.832251036613439 |
| 返回 1 行 |
percentileCont() 返回给定值在一组数据上的百分位数,百分位数范围从 0.0 到 1.0。它使用线性插值方法,如果所需百分位数位于两个值之间,则计算加权平均值。要使用四舍五入方法获取最近值,请参阅 percentileDisc。
语法:percentileCont(expression, percentile)
返回值:
agtype 浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | agtype 数值表达式 |
| percentile | 0.0 到 1.0 之间的 agtype 数值 |
注意事项:
percentileCont(null, percentile) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileCont(n.age, 0.4)
$$) as (percentile_cont_age agtype);
返回属性 age 中值的第 40 百分位数,使用加权平均值计算。
结果:
| percentile_cont_age |
|---|
| 29.0 |
| 返回 1 行 |
percentileDisc() 返回给定值在一组数据上的百分位数,百分位数范围从 0.0 到 1.0。它使用四舍五入方法,计算最接近百分位数的值。要获取插值结果,请参阅 percentileCont。
语法:percentileDisc(expression, percentile)
返回值:
agtype 浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | agtype 数值表达式 |
| percentile | 0.0 到 1.0 之间的 agtype 数值 |
注意事项:
percentileDisc(null, percentile) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileDisc(n.age, 0.5)
$$) as (percentile_disc_age agtype);
返回属性 age 中值的第 50 百分位数。
结果:
| percentile_disc_age |
|---|
| 33.0 |
| 返回 1 行 |
count() 返回值或记录的数量,有两种变体:
count(*) 返回匹配记录的数量count(expr) 返回表达式返回的非 null 值的数量。语法:count(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 一个表达式 |
注意事项:
count(*) 包含返回 null 的记录。count(expr) 忽略 null 值。count(null) 返回 0(零)。count(*) 可用于返回节点数量;例如,与某个节点 n 连接的节点数量。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[]->(x)
RETURN n.age, count(*)
$$) as (age agtype, number_of_people agtype);
返回起始节点 n(name 值为 'A')的 age 属性以及与 n 相关的节点数量。
结果:
| age | number_of_people |
|---|---|
| 13 | 3 |
| 返回 1 行 |
使用 count(*) 可以对关系类型进行分组和计数,返回每种类型的关系数量。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[r]->()
RETURN type(r), count(*)
$$) as (label agtype, count agtype);
返回关系类型及该类型的关系数量。
结果:
| label | count |
|---|---|
| "KNOWS" | 3 |
| 返回 1 行 |
count(expression) 返回值的数量与简单地使用 count(*) 返回记录数量相比,返回表达式返回的实际值数量可能更有用。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[]->(x)
RETURN count(x)
$$) as (count agtype);
返回与起始节点 n 连接的节点数量。
结果:
| count |
|---|
| 3 |
| 返回 1 行 |
count(expression) 可用于返回表达式返回的非 null 值的数量。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN count(n.age)
$$) as (count agtype);
返回标签为 Person 且 age 属性为非 null 值的节点数量。
结果:
| count |
|---|
| 3 |
| 返回 1 行 |
在此示例中,我们尝试查找所有朋友的朋友并计数:
count(DISTINCT friend_of_friend) 只会计算每个 friend_of_friend 一次,因为 DISTINCT 会去除重复项。count(friend_of_friend) 会多次计算相同的 friend_of_friend。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (me:Person)-[]->(friend:Person)-[]->(friend_of_friend:Person)
WHERE me.name = 'A'
RETURN count(DISTINCT friend_of_friend), count(friend_of_friend)
$$) as (friend_of_friends_distinct agtype, friend_of_friends agtype);
B 和 C 都认识 D,因此不使用 DISTINCT 时 D 会被计算两次。
结果:
| friend_of_friends_distinct | friend_of_friends |
|---|---|
| 1 | 2 |
| 1 row |
avg() 返回一组数值的平均值。
语法:avg(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回一组数值的表达式。 |
注意事项:
avg(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN avg(n.age)
$$) as (avg_age agtype);
返回属性 age 中所有值的平均值。
结果:
| avg_age |
|---|
| 30.0 |
| 返回 1 行 |
sum() 返回一组数值的总和。
语法:sum(expression)
返回值:
agtype 浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回一组数值的表达式。 |
注意事项:
sum(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN sum(n.age)
$$) as (total_age agtype);
返回属性 age 中所有值的总和。
结果:
| total_age |
|---|
| 90 |
| 返回 1 行 |