官术网_书友最值得收藏!

  • 精通Neo4j
  • 龐國明等
  • 1234字
  • 2023-07-17 19:01:09

3.3.5 Aggregation語句

3.3.5.1 簡介

Cypher支持使用聚合(Aggregation)來計算聚在一起的數據,類似SQL中的group by。聚合函數有多個輸入值,然后基于它們計算出一個聚合值。例如,avg函數計算多個數值的平均值。min函數用于找到一組值中最小的那個值。

聚合可以在匹配到的子圖上進行計算。非聚合的表達式將值聚集起來,然后放入聚合函數。

以下面的返回語句為例:

這里有兩個表達式:n和count()。前者n不是聚合函數,是一個分組鍵。后者count()是一個聚合函數。因此,根據不同的分組鍵(Grouping Key),匹配的子圖將被分為不同的組。聚合函數將運行在這些組上來計算聚合值。

下面的例子對理解聚合很有幫助,該查詢基于如圖3-9所示的數據。

圖3-9 查詢例子的數據

查詢:

在這個例子中,試圖找到朋友的所有朋友并計算朋友的個數。第一個count(DISTINCT friend_of_friend)聚合函數中每個friend_of_friend只會計算一次,因為DISTINCT剔除了重復的部分。第二個聚合函數中,每個friend_of_friend會被計算多次。當沒有使用DISTINCT時,因為B和C都認識D,因此D被計算了兩次。

結果:

聚合圖例如圖3-10所示。

圖3-10 聚合圖例

3.3.5.2 count

count用于計算行的數量。count有兩種使用方式:count(*)用于計算匹配的行數,而count(<expression>)用于計算<expression>中非空值的數量。

1.計算節點

計算節點的數量。例如:如果要計算連接到某個節點的節點數,可用count(*),示例如下。

查詢:

結果將返回起始節點及與之相連節點的數量。

結果:

2.按組計算關系類型的數量

計算關系類型組中的數量,返回類型和數量。

查詢:

結果將返回關系類型和關系組中的關系數量。

結果:

3.計算實體

除了通過count(*)計算結果的數量,還可以加入name值。

查詢:

結果將返回與滿足帶有name屬性值為A的節點相連的所有節點的數量。

結果:

4.計算非空值的數量

可以通過count(expression)來計算非空值的數量。

查詢:

結果將返回property屬性非空的所有節點。

結果:

3.3.5.3 統計

1.sum可以通過聚合函數sum計算所有值之和。計算的時候,空值將被丟棄。

查詢:

結果將返回包含Person標簽的所有節點的property屬性值之和。

結果:

2.avg

avg計算數值列的平均值。

查詢:

結果將返回property屬性值的平均值。

結果:

3.percentileDisc

percentileDisc計算給定值在一個組中的百分位,取值從0.0~1.0。它使用舍入法,返回最接近百分位的值。對于插值法,請參考percentileCont函數。

查詢:

結果:

4.percentileCont

percentileCont計算給定值在一個組中的百分位,百分位的值從0.0~1.0。它采用線性插值的方法,在兩個值之間計算一個加權平均數。對于使用舍入法獲取最近的值,請參考percentileDisc函數。

查詢:

結果:

5.stdev

stdev計算給定值在一個組中的標準偏差。它采用標準的two-pass方法,以N-1作為分母。當以部分樣本作為無偏估計時,應使用stdev;當計算整個樣本的標準偏差時,應使用stdevp。

查詢:

結果:

6.stdevp

stdevp計算給定值在一個組中的標準偏差。與stdev類似,區別如上所述。

查詢:

結果:

7.max

max查找數值列中的最大值。

查詢:

結果將返回property屬性中的最大值。

結果:

8.min

min查找數值列中的最小值。

查詢:

結果將返回property屬性中的最小值。

結果:

3.3.5.4 collect

collect將所有的值收集起來放入一個列表,空值null將被忽略。

查詢:

結果將以列表的形式返回收集到的值。

結果:

3.3.5.5 DISTINCT

所有的聚合函數都可以帶有DISTINCT修飾符,它將去掉其中的重復值。因此,計算節點中不重復眼睛顏色數量的查詢可以這樣寫:

查詢:

結果:

主站蜘蛛池模板: 乌什县| 衢州市| 彰化市| 灵武市| 永兴县| 册亨县| 泽州县| 桦南县| 和平县| 吉水县| 商城县| 丹东市| 龙里县| 绥棱县| 九台市| 龙川县| 大邑县| 天气| 任丘市| 无为县| 伊金霍洛旗| 阳春市| 内黄县| 广汉市| 陆良县| 天等县| 宜昌市| 临湘市| 康平县| 广河县| 巴中市| 梅州市| 湘潭市| 清远市| 岱山县| 北京市| 兴业县| 平遥县| 全州县| 塔河县| 汨罗市|