暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 数据库Oracle兼容 - 函数4

tocata 2024-08-19
65

聚合和分析函数

聚合函数的作用是根据一个输入值的集合计算出一个单独的结果值,下面的表中列出了内置的聚合函数。

名称参数个数功能举例
AVG1用于计算一个组和数据窗口内表达式的平均值。SELECT avg(col) FROM tb1; avg(distinct col) avg(all col)
COUNT1对一组内发生的事情进行累积计数count(col) count(distinct col) count(all col) count(*)
MAX1在一个组中的数据窗口中查找表达式的最大值max(col) max(distinct col) max(all col)
MIN1在一个组中的数据窗口中查找表达式的最小值min(col) min(distinct col) min(all col)
SUM1该函数计算组中表达式的累积和sum(col) sum(distinct col) sum(all col)

应该注意的是除了函数 COUNT 外,当没有查询出记录时,其它函数返回空值。特别是,如果没有记录的话,函数 SUM 返回空值,而不是像期待的那样,返回 0。当必要的时候,我们可以使用函数 COALESCE 将空值替换为 0。

下面详细介绍通常用于统计分析的聚合函数。分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。之所以和上面的通用聚合函数分开列出,是为了更明确各自的功能。

窗口函数说明

分析函数(也叫窗口函数)与聚合函数,都是对行集组(一组行的集合)进行聚合计算,不同的是,聚合函数每组只能返回一个值(一行),而窗口函数每组可以返回多个值(多行)。行集组又称为窗口(Window),由 analytic_clause 定义。而窗口大小取决于实际的行数或逻辑间隔(例如时间)。组内每一行都是基于窗口的逻辑计算的结果。触发一个分析函数需要特殊的关键字 OVER 来指定窗口。

窗口函数的语法:

analytic_function ( [arguments] ) OVER ( [ partition_clause ]

[ order_by_clause [ windowing_clause ] ] )

其中:

  • OVER 是关键字,用于标识分析函数。

  • analytic_function 是指定的分析函数的名字,Oracle 分析函数很多。

  • 分区子句的格式为: partition by[,value_expr]...关键字 partition by 子句根据由分区表达式的条件逻辑地将单个结果集分成 N 组。这里的"分区 partition"和"组 group"都是同义词。

  • 排序子句 order-by-clause 指定数据是如何存在分区内的。其格式为:

order [ siblings ] by { expr | position | c_alias } [ asc | desc ] [ nulls first | nulls last ]

其中:

(1)asc|desc:指定了排列顺序。

(2)nulls first|nulls last:指定了包含空值的返回行应出现在有序序列中的第一个或最后一个位置。

  • 窗口子句 windowing-clause 给出一个固定的或变化的数据窗口方法,分析函数将对这些数据进行操作。在一组基于任意变化或固定的窗口中,可用该子句让分析函数计算出它的值。

KEEP 函数说明

keep 是一个特殊的分析函数,他的用法不同于通过 OVER 关键字指定的分析函数,可以用于这样一种场合下:取同一个分组下以某个字段排序后,对指定字段取最小或最大的那个值。

语法:

min | max(column1) keep (dense_rank first | last ORDER BY column2)

[ OVER (PARTION BY column3) ]

示例:

emp 表格定义见【示例参考表格】

SELECT deptno, MIN(t.mgr)  KEEP (DENSE_RANK FIRST ORDER BY t.sal) a   
FROM emp t  GROUP BY deptno;

含义:按 deptno 分组,分组内按 sal 排序,DENSE_RANK FIRST 表示保留 sal 排在前面的一组数据(当排在前面的 sal 有重复值时,保存多条数据)。然后在每组记录中,执行前面的聚合函数,这里是 min(t.mgr)。

执行结果:

 DEPTNO |  A   
--------+------
     10 | 7782
     30 | 7698
     20 | 7902
(3 rows)

具有统计用途的聚合函数:

名称参数个数功能举例
COVAR_POP2COVAR_POP(expr1, expr2) 返回一对表达式的总体协方差。
COVAR_SAMP2COVAR_SAMP(expr1, expr2)返回一对表达式的样本协方差。
CUME_DIST0~n计算一个值在一组值中的累积分布。CUME_DIST(15500, .05) WITHIN GROUP (ORDER BY salary, commission_pct)
RANK0~n基于 OVER 子句中的 ORDER BY 表达式确定一组值的排名。当有相同排序值时,将会有相同的排名,并且值相同的行数会被记录到下个排名中。RANK(15500) WITHIN GROUP (ORDER BY salary DESC)
DENSE_RANK0~n计算一组数值中的排序值,连续排序,有两个第二名时仍然跟着第三名。DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary)
PERCENT_RANK0~n百分比排名。PERCENT_RANK(15000, .05) WITHIN GROUP (ORDER BY salary
REGR_SLOPE2REGR_SLOPE:返回斜率,等于 COVAR_POP(expr1, expr2) / VAR_POP(expr2)。REGR_SLOPE(expr1, expr2)
REGR_INTERCEPT2REGR_INTERCEPT:返回回归线的 y 截距,等于 AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)。REGR_INTERCEPT(expr1, expr2)
REGR_COUNT2返回用于填充回归线的非空数字对的数目。REGR_COUNT(expr1, expr2)
REGR_R22返回回归线的决定系数,计算式为: If VAR_POP(expr2) = 0 then return NULL If VAR_POP(expr1) = 0 AND VAR_POP(expr2) != 0 then return 1 If VAR_POP(expr1) > 0 AND VAR_POP(expr2 != 0 then return POWER(CORR(expr1,expr),2)。REGR_R2(expr1, expr2)
REGR_AVGX2计算回归线的自变量 (expr2) 的平均值,去掉了空对 (expr1, expr2) 后,等于 AVG(expr2)。REGR_AVGX(expr1, expr2)
REGR_AVGY2计算回归线的应变量 (expr1) 的平均值,去掉了空对 (expr1, expr2) 后,等于 AVG(expr1)。REGR_AVGY(expr1, expr2)
REGR_SXX2返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr2)。REGR_SXX(expr1, expr2)
REGR_SYY2返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr1)。REGR_SYY(expr1, expr2)
REGR_SXY2返回值等于 REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)。REGR_SXY(expr1, expr2)
STDDEV1计算当前行关于组的标准偏离。stddev(col) stddev(distinct col) stddev(all col)
STDDEV_POP1该函数计算总体标准偏离,并返回总体变量的平方根。STDDEV_POP(salary)
STDDEV_SAMP1该函数计算累积样本标准偏离,并返回总体变量的平方根。STDDEV_SAMP(salary)
VAR_POP1该函数返回非空集合的总体变量(忽略null)。VAR_POP(salary)
VAR_SAMP1该函数返回非空集合的样本变量(忽略null)。VAR_SAMP(salary)
VARIANCE1如果表达式中行数为 1,则返回 0,如果表达式中行数大于 1,则返回 VAR_SAMP。variance(col)
CORR2返回一对表达式的相关系数。CORR(list_price, min_price)

COVAR_POP

计算协方差。

示例:

emp 表格定义见【示例参考表格】

SELECT MGR , COVAR_POP ( SYSDATE - HIREDATE , sal )  AS covar_pop ,
COVAR_SAMP ( SYSDATE - HIREDATE , sal )  AS covar_samp
FROM emp GROUP BY MGR ORDER BY MGR , covar_pop , covar_samp ;

 MGR  |     COVAR_POP     |     COVAR_SAMP     
------+-------------------+---------------------
 7566 |                 0 |                  0
 7698 |             43976 |              54970
 7782 |                 0 |                   
 7788 |                 0 |                   
 7839 | 10547.22222222222 | 15820.833333333332
 7902 |                 0 |                  0
      |                 0 |                   
(7 rows)

COVAR_SAMP

计算样本协方差。

示例:

emp 表格定义见【示例参考表格】

SELECT MGR , COVAR_SAMP( SYSDATE - HIREDATE , sal )  AS covar_pop ,
COVAR_SAMP ( SYSDATE - HIREDATE , sal )  AS covar_samp
FROM emp GROUP BY MGR ORDER BY MGR , covar_pop , covar_samp ;

 MGR  |     COVAR_POP      |     COVAR_SAMP     
------+--------------------+---------------------
 7566 |                  0 |                  0
 7698 |              54970 |              54970
 7782 |                    |                   
 7788 |                    |                   
 7839 | 15820.833333333332 | 15820.833333333332
 7902 |                  0 |                  0
      |                    |                   
(7 rows)

CUME_DIST

计算一个值在一组值中的累积分布。返回值的范围为 0 < CUME_DIST <= 1。

示例:

emp 表格定义见【示例参考表格】

SELECT deptno , ename , sal, cume_dist ( ) OVER ( partition BY deptno ORDER BY sal DESC ) "RANK" FROM emp WHERE sal>2000;
 DEPTNO | ENAME  |  SAL  |        RANK         
--------+--------+-------+---------------------
     10 | KING   | 10000 |  0.3333333333333333
     10 | CLARK  |  7450 |  0.6666666666666666
     10 | MILLER |  6300 |                   1
     20 | ADAMS  |  8100 | 0.16666666666666666
     20 | FORD   |  8000 |                 0.5
     20 | SCOTT  |  8000 |                 0.5
     20 | JONES  |  7975 |  0.6666666666666666
     20 | SMITH  |  6800 |  0.8333333333333334
     20 | SMITH  |  4800 |                   1
     30 | BLAKE  | 11850 | 0.16666666666666666
     30 | ALLEN  |  7600 |  0.3333333333333333
     30 | TURNER |  6500 |                 0.5
     30 | WARD   |  6250 |  0.8333333333333334
     30 | MARTIN |  6250 |  0.8333333333333334
     30 | JAMES  |  5950 |                   1
(15 rows)

RANK

确定一组值的排名。当有相同排序值时,将会有相同的排名,并且值相同的行数会被记录到下个排名中。

示例:

计算在同一个部门内,每个人的工资排名。(emp 表格定义见【示例参考表格】)

SELECT empno,ename,sal, deptno, rank() OVER (PARTITION BY deptno ORDER BY sal)  FROM emp;
 EMPNO | ENAME  |  SAL  | DEPTNO | RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL)  
-------+--------+-------+--------+---------------------------------------------------
  7934 | MILLER |  6300 |     10 |                                              1
  7782 | CLARK  |  7450 |     10 |                                              2
  7839 | KING   | 10000 |     10 |                                              3
  7469 | SMITH  |  4800 |     20 |                                              1
  7369 | SMITH  |  6800 |     20 |                                              2
  7566 | JONES  |  7975 |     20 |                                              3
  7902 | FORD   |  8000 |     20 |                                              4
  7788 | SCOTT  |  8000 |     20 |                                              4
  7876 | ADAMS  |  8100 |     20 |                                              6
  7900 | JAMES  |  5950 |     30 |                                              1
  7521 | WARD   |  6250 |     30 |                                              2
  7654 | MARTIN |  6250 |     30 |                                              2
  7844 | TURNER |  6500 |     30 |                                              4
  7499 | ALLEN  |  7600 |     30 |                                              5
  7698 | BLAKE  | 11850 |     30 |                                              6
(15 rows)

DENSE_RANK

DENSE_RANK 窗口函数基于 OVER 子句中的 ORDER BY 表达式确定一组值中的一个值的排名。如果存在可选的 PARTITION BY子句,则为每个行组重置排名。带符合排名标准的相同值的行接收相同的排名。DENSE_RANK 功能与 RANK 的区别在于:如果两行或多行并列,则排序值序列中无间隔。例如,如果两个行的排名为 1,则下一个排名则为 2。

示例:

emp 表格定义见【示例参考表格】

antdb=# SELECT deptno, ename, sal, DENSE_RANK ( ) OVER ( partition BY deptno ORDER BY sal DESC ) "RANK" FROM emp WHERE sal>6500;
 DEPTNO |  ENAME |  SAL  | RANK 
--------+--------+-------+---------
     10 | KING   | 10000 |    1
     10 | CLARK  |  7450 |    2
     20 | ADAMS  |  8100 |    1
     20 | SCOTT  |  8000 |    2
     20 | FORD   |  8000 |    2
     20 | JONES  |  7975 |    3
     20 | SMITH  |  6800 |    4
     30 | BLAKE  | 11850 |    1
     30 | ALLEN  |  7600 |    2
(9 rows)

PERCENT_RANK

计算给定行的百分比排名。该函数没有参数,但需要空括号。返回值范围介于 0 和 1(含 1)之间。任何集合中的第一行的 PERCENT_RANK 均为 0。

示例:

计算每一个员工在同一种职位内的百分比排名。(emp 表格定义见【示例参考表格】)

SELECT empno,job, sal, percent_rank()  OVER (PARTITION BY job ORDER BY sal)  FROM emp;
 EMPNO |    JOB    |  SAL  | PERCENT_RANK() OVER (PARTITION BY JOB ORDER BY SAL)  
-------+-----------+-------+-------------------------------------------------------
  7902 | ANALYST   |  8000 |                                                    0
  7788 | ANALYST   |  8000 |                                                    0
  7469 | CLERK     |  4800 |                                                    0
  7900 | CLERK     |  5950 |                                                 0.25
  7934 | CLERK     |  6300 |                                                  0.5
  7369 | CLERK     |  6800 |                                                 0.75
  7876 | CLERK     |  8100 |                                                    1
  7782 | MANAGER   |  7450 |                                                    0
  7566 | MANAGER   |  7975 |                                                  0.5
  7698 | MANAGER   | 11850 |                                                    1
  7839 | PRESIDENT | 10000 |                                                    0
  7521 | SALESMAN  |  6250 |                                                    0
  7654 | SALESMAN  |  6250 |                                                    0
  7844 | SALESMAN  |  6500 |                                   0.6666666666666666
  7499 | SALESMAN  |  7600 |                                                    1
(15 rows)

REGR_SLOPE

计算斜率。

示例:

CREATE TABLE tb(id int, num int);
INSERT into tb values(1, 298),(2, 368),(3, 458),(4, 328),(5, 108),(6, 667),(7, 123),(8, 555);
SELECT count(*),regr_slope(t.num,tb.num) FROM 
(SELECT id-1 AS id, num FROM tb) AS t,tb WHERE t.id=tb.id ;
 COUNT(*) | REGR_SLOPE(T.NUM,TB.NUM)  
----------+-----------------------------
       28 |         -0.8425517064826854
(1 row)

REGR_INTERCEPT

计算截距。

示例:

CREATE TABLE tb(id int, num int);
INSERT into tb values(1, 298),(2, 368),(3, 458),(4, 328),(5, 108),(6, 667),(7, 123),(8, 555);

SELECT count(*),regr_intercept(t.num,tb.num) FROM 
(SELECT id-1 AS id, num FROM tb) AS t,tb WHERE t.id=tb.id ;
 COUNT(*) | REGR_INTERCEPT(T.NUM,TB.NUM)  
----------+---------------------------------
       28 |               655.2852157477586
(1 row)

REGR_COUNT

regr_count(y, x) 计算 x 和 y 都不是空的记录数。

示例:

CREATE TABLE tb(id int, num int);
INSERT into tb values(1, 298),(2, null),(3, null),(null, 328),(null, 108),(6, 667);
SELECT regr_count(id, num) FROM tb;

REGR_COUNT(ID, NUM)  
----------------------
                    2
(1 row)

REGR_R2

计算相关性,相关性越高,说明这组数据用于预估的准确度越高。当获得最高的相关性(接近1)时,预测数据最准确。

示例:

CREATE TABLE tb(id int, num int);
INSERT INTO tb values(1, 298),(2, 368),(3, 458),(4, 328),(5, 108),(6, 667),(7, 123),(8, 555);

计算两组数据的相关性:

SELECT count(*),regr_r2(t.num,tb.num) FROM 
(SELECT id-1 AS id, num FROM tb) AS t,tb WHERE t.id=tb.id ;

 COUNT(*) | REGR_R2(T.NUM,TB.NUM)  
----------+--------------------------
       28 |       0.6088521468006012
(1 row)

REGR_AVGX

regr_avgx(y, x) 其实就是算 x 的平均值(数学期望), y 在这里没有任何作用。

REGR_AVGY

regr_avgy(y, x) 其实就是算 y 的平均值(数学期望) ,x 在这里没有任何作用。

REGR_SXX

返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr2) 。

REGR_SYY

返回值等于 REGR_COUNT(expr1, expr2) * VAR_POP(expr1) 。

REGR_SXY

返回值等于 REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)。

STDDEV

计算当前行关于组的标准偏离。

示例:

例返回部门 30 按雇佣日期排序的薪水值的累积标准偏离。(emp 表格定义见【示例参考表格】)

SELECT ename,hiredate,sal,stddev(sal) OVER(ORDER BY hiredate) a FROM emp WHERE deptno=20;
ENAME |      HIREDATE       | SAL  |         A         
-------+---------------------+------+-------------------
 SMITH | 1980-12-17 00:00:00 | 4800 | 1414.213562373095
 SMITH | 1980-12-17 00:00:00 | 6800 | 1414.213562373095
 JONES | 1981-04-02 00:00:00 | 7975 | 1605.264775667865
 FORD  | 1981-12-03 00:00:00 | 8000 | 1503.935808692202
 SCOTT | 1987-04-19 00:00:00 | 8000 |  1393.24262065155
 ADAMS | 1987-05-23 00:00:00 | 8100 | 1309.428946780491
(6 rows)

STDDEV_POP

该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与 VAR_POP 函数的平方根相同。(emp 表格定义见【示例参考表格】)

示例:

SELECT deptno,ename,sal,stddev_pop(sal) OVER (PARTITION BY deptno) AS pop FROM emp;
 DEPTNO | ENAME  |  SAL  |        POP        
---------------+------------+------------+-------------------
     10 | KING   | 10000 | 1546.142152441216
     10 | CLARK  |  7450 | 1546.142152441216
     10 | MILLER |  6300 | 1546.142152441216
     20 | SCOTT  |  8000 | 1195.339619336511
     20 | SMITH  |  6800 | 1195.339619336511
     20 | JONES  |  7975 | 1195.339619336511
     20 | FORD   |  8000 | 1195.339619336511
     20 | ADAMS  |  8100 | 1195.339619336511
     20 | SMITH  |  4800 | 1195.339619336511
     30 | ALLEN  |  7600 | 2057.506581601462
     30 | MARTIN |  6250 | 2057.506581601462
     30 | TURNER |  6500 | 2057.506581601462
     30 | JAMES  |  5950 | 2057.506581601462
     30 | BLAKE  | 11850 | 2057.506581601462
     30 | WARD   |  6250 | 2057.506581601462
(15 rows)

STDDEV_SAMP

该函数计算累积样本标准偏离,并返回总体变量的平方根,其返回值与 VAR_POP 函数的平方根相同。

示例:

begin;
CREATE TABLE employees (manager_id INT,last_name varchar(50),hiredate varchar(50),SALARY INT);
INSERT INTO employees VALUES(100, 'Raphaely', '2017-07-01', 1700);
INSERT INTO employees VALUES(100, 'De Haan', '2018-05-01',11000);      
INSERT INTO employees VALUES(100, 'Errazuriz', '2017-07-21', 1400);
INSERT INTO employees VALUES(100, 'Hartstein', '2019-05-01',14000);     
INSERT INTO employees VALUES(100, 'Raphaely', '2017-07-22', 1700);
INSERT INTO employees VALUES(100, 'Weiss',  '2019-07-11',13500);     
INSERT INTO employees VALUES(100, 'Russell', '2019-10-05', 13000);
INSERT INTO employees VALUES(100, 'Partners',  '2018-12-01',14000);     
INSERT INTO employees VALUES(200, 'Ross',  '2019-06-11',13500);     
INSERT INTO employees VALUES(200, 'Bell', '2019-05-25', 13000);
INSERT INTO employees VALUES(200, 'Part',  '2018-08-11',14000);
COMMIT;
SELECT manager_id, last_name, hiredate, salary,STDDEV_SAMP(salary) OVER (PARTITION BY manager_id 
ORDER BY hiredate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev FROM employees ORDER BY manager_id, last_name, hiredate, salary, cum_sdev;

 MANAGER_ID | LAST_NAME |  HIREDATE  | SALARY |     CUM_SDEV      
------------+-----------+------------+--------+--------------------
        100 | De Haan   | 2018-05-01 |  11000 | 4702.127178203499
        100 | Errazuriz | 2017-07-21 |   1400 |  212.132034355964
        100 | Hartstein | 2019-05-01 |  14000 | 6340.346993658943
        100 | Partners  | 2018-12-01 |  14000 | 6064.899009876422
        100 | Raphaely  | 2017-07-01 |   1700 |                  
        100 | Raphaely  | 2017-07-22 |   1700 |  173.205080756888
        100 | Russell   | 2019-10-05 |  13000 | 6026.474330580265
        100 | Weiss     | 2019-07-11 |  13500 |  6244.31169717116
        200 | Bell      | 2019-05-25 |  13000 |  707.106781186548
        200 | Part      | 2018-08-11 |  14000 |                  
        200 | Ross      | 2019-06-11 |  13500 |               500
(11 rows)

VAR_POP

该函数返回分组序列的总体方差。

示例:

emp 表格定义见【示例参考表格】

SELECT empno, sal, VAR_pop(sal) OVER (ORDER BY hiredate) AS "var_pop"
FROM emp ORDER BY ename, sal, "var_pop" ;

EMPNO |  SAL  |       var_pop        
------------+----------+----------------------
  7876 |  8100 | 2799183.333333333333
  7499 |  7600 | 1386666.666666666667
  7698 | 11850 | 4748003.472222222222
  7782 |  7450 | 4070841.836734693878
  7902 |  8000 | 3328381.076388888889
  7900 |  5950 | 3328381.076388888889
  7566 |  7975 |              1251400
  7839 | 10000 |           3729306.25
  7654 |  6250 | 3401111.111111111111
  7934 |  6300 | 3166597.633136094675
  7788 |  8000 | 2967286.352040816327
  7469 |  4800 |              1000000
  7369 |  6800 |              1000000
  7844 |  6500 |       3678505.859375
  7521 |  6250 |           1044218.75
(15 rows)

VAR_SAMP

该函数返回分组序列的样本方差。

示例:

emp 表格定义见【示例参考表格】

SELECT empno, sal, VAR_samp(sal)  OVER (ORDER BY hiredate) AS "var_samp"
FROM emp ORDER BY ename, sal, "var_samp" ;

 EMPNO |  SAL  |       var_samp       
-------+-------+-----------------------
  7876 |  8100 |              2999125
  7499 |  7600 |              2080000
  7698 | 11850 | 5697604.166666666667
  7782 |  7450 |  4749315.47619047619
  7902 |  8000 | 3630961.174242424242
  7900 |  5950 | 3630961.174242424242
  7566 |  7975 |              1564250
  7839 | 10000 | 4143673.611111111111
  7654 |  6250 |              3826250
  7934 |  6300 | 3430480.769230769231
  7788 |  8000 | 3195539.148351648352
  7469 |  4800 |              2000000
  7369 |  6800 |              2000000
  7844 |  6500 | 4204006.696428571429
  7521 |  6250 | 1392291.666666666667
(15 rows)

VARIANCE

计算指定列的方差。

示例:

计算列 sal 的方差(emp 表格定义见【示例参考表格】):

SELECT empno, sal, VARIANCE(sal) OVER (ORDER BY hiredate) "Variance"
FROM emp ORDER BY ename, sal, "Variance";
 EMPNO |  SAL  |       Variance       
-------+-------+------------------------
  7876 |  8100 |              2999125
  7499 |  7600 |              2080000
  7698 | 11850 | 5697604.166666666667
  7782 |  7450 |  4749315.47619047619
  7902 |  8000 | 3630961.174242424242
  7900 |  5950 | 3630961.174242424242
  7566 |  7975 |              1564250
  7839 | 10000 | 4143673.611111111111
  7654 |  6250 |              3826250
  7934 |  6300 | 3430480.769230769231
  7788 |  8000 | 3195539.148351648352
  7469 |  4800 |              2000000
  7369 |  6800 |              2000000
  7844 |  6500 | 4204006.696428571429
  7521 |  6250 | 1392291.666666666667
(15 rows)

CORR

计算一对表达式的相关系数。

示例:

-- t1 表格定义:
CREATE TABLE t1(id int, num int);
INSERT into t1 values(1, 298),(2, 368),(3, 458),(4, 328),(5, 108),(6, 667),(7, 123),(8, 555);

antdb=# SELECT corr(t.num,t1.num) FROM 
antdb-# (SELECT id-1 AS id, num FROM t1) AS t,t1 WHERE t.id=t1.id ;
 CORR(T.NUM,T1.NUM)  
------------------------------
   -0.7802897838627655
(1 row)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论