解析Oracle的CORR分析函数

2024年 5月 24日 30.4k 0

加入我们的微信群,你将获得不仅仅是知识,还能享受免费最新GPT-4o模型微信机器人+Oracle MOS免费查询+职业发展规划咨询+数据库大佬交流,很多志同道合的小伙伴,欢迎加群一起探讨、学习、进步!“选择”比“努力”更重要。扫描下方二维码添加作者微信,回复“DBA理想”即可开启你的数据库学习之旅。解析Oracle的CORR分析函数-1

解析Oracle的CORR分析函数-2

解析Oracle的CORR分析函数-3

引言

解析Oracle的CORR分析函数-4

在数据分析中,了解变量之间的相关性至关重要。而 Oracle 提供的 CORR 分析函数正是用于计算变量间相关性的强大工具。本文将详细解析 Oracle 中的 CORR 分析函数,帮助您更好地理解和应用它。

解析Oracle的CORR分析函数-3

CORR 函数简介

解析Oracle的CORR分析函数-4

CORR 函数用于计算两个变量之间的皮尔逊相关系数。皮尔逊相关系数值介于 -1 和 +1 之间,表示变量之间的线性关系:

  • +1:完全正线性相关。一个变量增加,另一个变量也按比例增加。

  • 0:无线性相关。变量之间没有线性关系。

  • -1:完全负线性相关。一个变量增加,另一个变量按比例减少。

解析Oracle的CORR分析函数-3

创建测试用例

解析Oracle的CORR分析函数-4

需要一张示例表来进行演示:

    CREATE TABLE emp ( empno NUMBER(4) CONSTRAINT pk_emp PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2));INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('1980-12-17','yyyy-mm-dd'),800,NULL,20);INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('1981-02-20','yyyy-mm-dd'),1600,300,30);INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('1981-02-22','yyyy-mm-dd'),1250,500,30);INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('1981-04-02','yyyy-mm-dd'),2975,NULL,20);INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('1981-09-28','yyyy-mm-dd'),1250,1400,30);INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1981-05-01','yyyy-mm-dd'),2850,NULL,30);INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('1981-06-09','yyyy-mm-dd'),2450,NULL,10);INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('1987-04-19','yyyy-mm-dd')-85,3000,NULL,20); -- 1987-07-13 减去85天INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('1981-11-17','yyyy-mm-dd'),5000,NULL,10);INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('1981-09-08','yyyy-mm-dd'),1500,0,30);INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('1987-05-23','yyyy-mm-dd')-51,1100,NULL,20); -- 1987-07-13 减去51天INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('1981-12-03','yyyy-mm-dd'),950,NULL,30);INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('1981-12-03','yyyy-mm-dd'),3000,NULL,20);INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('1982-01-23','yyyy-mm-dd'),1300,NULL,10);COMMIT;

    CORR 作为聚合函数

    CORR 聚合函数用于计算相关系数或皮尔逊相关系数。作为聚合函数,它减少了行数,即“聚合”数据。例如,如果数据没有分组,我们可以将 EMP 表中的 14 行数据聚合成一行,如下所示:

      SELECT CORR(SYSDATE - hiredate, sal) AS corr_val,
      CORR_S(SYSDATE - hiredate, sal) AS corr_s_val,
      CORR_K(SYSDATE - hiredate, sal) AS corr_k_val
      FROM emp;

      结果如下:

      解析Oracle的CORR分析函数-5

      通过添加 GROUP BY
      子句,我们可以按职位获取更多的详细信息:

        SELECT job,
        CORR(SYSDATE - hiredate, sal) AS corr_val_by_job,
        CORR_S(SYSDATE - hiredate, sal) AS corr_s_val_by_job,
        CORR_K(SYSDATE - hiredate, sal) AS corr_k_val_by_job
        FROM emp
        GROUP BY job
        ORDER BY job;

        结果如下:

        解析Oracle的CORR分析函数-6

        CORR 分析函数

        CORR 分析函数用于计算相关系数或皮尔逊相关系数。它计算不含空值行的以下值:

          COVAR_POP(expr1, expr2) (STDDEV_POP(expr1) * STDDEV_POP(expr2))

          该函数返回介于 +1 和 -1 之间的值,表示以下内容:

          • +1:完全正线性相关。工作时间越长,工资越高。

          • 0:无线性相关。工作时间与工资无关。

          • 1:完全负线性相关。工作时间越长,工资越低。

          以下是 CORR 分析函数的基本描述:

            CORR(expr1, expr2) [ OVER (analytic_clause) ]

            使用空的 OVER
            子句将 CORR 函数变为分析函数。在没有分区子句的情况下,整个结果集被视为一个分区,如下所示:

              SELECT empno,
              ename,
              deptno,
              sal,
              job,
              CORR(SYSDATE - hiredate, sal) OVER () AS corr_val
              FROM emp;

              结果如下:

              解析Oracle的CORR分析函数-7

              通过添加分区子句,我们可以按部门显示相关性:

                SELECT empno, ename, deptno, sal, job, CORR(SYSDATE - hiredate, sal) OVER (PARTITION BY deptno) AS corr_valFROM emp;

                结果如下:

                解析Oracle的CORR分析函数-8

                或者,我们可以按职位类型显示相关性:

                  SELECT empno,
                  ename,
                  deptno,
                  sal,
                  job,
                  CORR(SYSDATE - hiredate, sal) OVER (PARTITION BY job) AS corr_val
                  FROM emp
                  ORDER BY job, deptno;

                  结果如下:

                  解析Oracle的CORR分析函数-9

                  解析Oracle的CORR分析函数-3

                  小结

                  解析Oracle的CORR分析函数-4

                  文章深入探讨了Oracle中的CORR分析函数,它可以帮助理解数据中的相关性,并在不同维度下深入分析数据。这对于数据分析师和数据库管理员来说,是一个非常有用的工具。实战练习是掌握CORR分析函数的关键。

                  如果您觉得这篇文章对您有所帮助,请给我们点赞并分享给更多的朋友。您的支持是我们前进的动力!

                  相关文章

                  pt-kill工具的使用
                  pt-ioprofile工具包的使用
                  数据库管理-第216期 Oracle的高可用-01(20240703)
                  DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
                  数据库事务的四大特性: ACID 
                  使用BBED修复损坏的SYSTEM文件头

                  发布评论