聚合函数

更新时间:2025-01-09 07:27:08

本文介绍能够进行自动聚合的函数。

数据准备

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()返回一组值中的最小值。

语法

min(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 row)

使用min()与列表

  1. 数据准备,首先运行以下三个命令:

    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);
  2. 使用min()与列表。

    SELECT *
    FROM cypher('graph_name', $$
        MATCH (v:min_test)
        RETURN min(v.val)
    $$) as (min_val agtype);

    返回集合中所有值的最小值。在这种情况下,是列表['a', 'b', 23'],因为['a', 'b', 23][1, 'b', 23]两个列表被视为比字符串d更小的值,且['a', 'b', 23]中的字符串a被视为比数值1更小的值。

        min_val     
    ----------------
     ["a", "b", 23]
    (1 row)

max

max()返回一组值中的最大值。

语法

max(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 row)

stDev

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 row)

stDevP

stDevP()返回给定值在一组数据中的标准差。它使用标准的两步法,分母为N,当计算整个总体的标准差时应使用此函数。如果只是计算总体样本的标准差,则应使用stDev

语法

stDevP(expression)

返回值

Agtype浮点数。

参数

名称

描述

名称

描述

expression

Agtype数字表达式。

注意事项

  • 任何空值都会从计算中排除。

  • stDevP(null)返回0.0(零)。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (n:Person)
    RETURN max(n.age)
$$) as (max_age agtype);

返回属性age值的总体标准差。

    stdevp_age    
--------------------
 12.832251036613439
(1 row)

percentileCont

percentileCont()返回给定值在一组数据中的百分位数,百分位数范围从0.01.0。它使用线性插值方法,如果所需的百分位数位于两个值之间,则计算这两个值之间的加权平均值。对于使用四舍五入方法的最近值,请参见percentileDisc

语法

percentileCont(expression, percentile)

返回值

Agtype浮点数。

参数

名称

描述

名称

描述

expression

Agtype数字表达式。

percentile

百分位数,一个介于0.01.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个百分位数,该值通过加权平均计算得出。在这种情况下,0.4是中位数,即第40个百分位数。

 percentile_cont_age 
---------------------
 29.0
(1 row)

percentileDisc

percentileDisc()函数返回给定值在一组数据中的百分位数,百分位数范围从0.01.0。它使用四舍五入的方法来计算最接近该百分位数的值。对于插值的情况,请参见percentileCont

语法

percentileDisc(expression, percentile)

返回值

Agtype浮点数。

参数

名称

描述

名称

描述

expression

Agtype数字表达式。

percentile

百分位数,一个介于0.01.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 row)

count

count()返回值或记录的数量,它有两种变体:

  • count(*)返回匹配记录的数量。

  • count(expr)返回表达式返回的非空值的数量。

语法

count(expression)

返回值

Agtype整数。

参数

名称

描述

名称

描述

expression

Agtype表达式。

注意事项

  • 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(其名称值为A)的年龄属性以及与n相关的节点数量。

     age | number_of_people 
    -----+------------------
     13  | 3
    (1 row)
  • 使用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 row)

使用count(expression)返回值的数量

与其简单地使用count(*)返回记录的数量,返回表达式实际返回的值的数量可能更有用。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'A'})-[]->(x)
    RETURN count(x)
$$) as (count agtype);

返回与起始节点n连接的节点数量。

 count 
-------
 3
(1 row)

计算非空值

count(expression)可用于返回表达式返回的非空值的数量。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (n:Person)
    RETURN count(n.age)
$$) as (count agtype);

返回具有Person标签且年龄属性为非空值的节点数量。

 count 
-------
 3
(1 row)

包含和不包含重复项的计数

示例

在以下示例中,我们试图找到所有我们的“朋友的朋友”,并统计他们的数量。

  • 第一个聚合函数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);

BC都认识D,因此如果不使用DISTINCT,D将会被计数两次。

 friend_of_friends_distinct | friend_of_friends 
----------------------------+-------------------
 1                          | 2
(1 row)

avg

avg()返回一组数值的平均值。

语法

avg(expression)

返回值

Agtype整数。

参数

名称

描述

名称

描述

expression

一组数值的表达式。

注意事项

  • 任何null值都将从计算中排除。

  • 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 row)

sum

sum()返回一组数值的总和。

语法

sum(expression)

返回值

Agtype浮点数。

参数

名称

描述

名称

描述

expression

一组数值的表达式。

注意事项

  • 任何null值都将从计算中排除。

  • sum(null)返回null

示例

SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN sum(n.age)
$$) as (total_age agtype);

返回属性age中所有值的总和。

 total_age 
-----------
 90
(1 row)
  • 本页导读 (1)
  • 数据准备
  • min
  • 使用min()与列表
  • max
  • stDev
  • stDevP
  • percentileCont
  • percentileDisc
  • count
  • 使用count(expression)返回值的数量
  • 计算非空值
  • 包含和不包含重复项的计数
  • avg
  • sum
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等