Вычислить матрицу корреляции, используя SQL в Oracle

Данная примерная таблица с некоторыми значениями, подобными этому:

а1а2а3а4а5
1215131221
1423415713
2341571339
9081327678

Наша цель — создать корреляционную матрицу с использованием SQL в Oracle.

Таблица результатов должна быть такой:

#а1а2а3а4а5
а110,968627486-0,0235907010,7235664090,962065691
а20,96862748610,2142176520,6559790920,974931214
а3-0,0235907010,21421765210,0098911220,079502115
а40,7235664090,6559790920,00989112210,524414529
а50,9620656910,9749312140,0795021150,5244145291

Я попробовал какую-то формулу для расчета коэффициента корреляции двух значений, но это не может помочь. Также не работает корреляционная функция.

Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Community 17.05.2022 03:23
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать CORR функция:

WITH ordered (rn, a1, a2, a3, a4, a5) AS (
  SELECT ROWNUM, a1, a2, a3, a4, a5 FROM table_name
)
SELECT key,
       CORR(a1, value) AS a1,
       CORR(a2, value) AS a2,
       CORR(a3, value) AS a3,
       CORR(a4, value) AS a4,
       CORR(a5, value) AS a5
FROM   ordered t
       INNER JOIN (
         SELECT *
         FROM   ordered
         UNPIVOT (
           value FOR key IN (a1, a2, a3, a4, a5)
         )
       ) d
       ON (t.rn = d.rn)
GROUP BY key

Что для примера данных:

CREATE TABLE table_name (a1, a2, a3, a4, a5) AS
SELECT 12, 15, 13, 12, 21 FROM DUAL UNION ALL
SELECT 14, 23, 41, 57, 13 FROM DUAL UNION ALL
SELECT 23, 41, 57, 13, 39 FROM DUAL UNION ALL
SELECT 90, 81, 32, 76, 78 FROM DUAL;

Выходы:

KEYA1A2A3A4A5
A11.9686274863493618022648973908306711860158-.0235907009791586343670275607353945975836.7235664093128934907375377255687028401814.9620656911630149496690023500551903300058
A2.96862748634936180226489739083067118601581.2142176524658728558977962209541976877097.655979092200627387045632202651644194262.9749312135706365317565525851529784515689
A3-.0235907009791586343670275607353945975836.21421765246587285589779622095419768770971.009891122282267634886059354456616140169476.079502115405919407497390073647822157651
A4.7235664093128934907375377255687028401814.655979092200627387045632202651644194262.0098911222822676348860593544566161401694761.5244145293486588849105425925771231892634
A5.9620656911630149496690023500551903300058.9749312135706365317565525851529784515689.079502115405919407497390073647822157651.52441452934865888491054259257712318926341

дб <> рабочий пример здесь

Другие вопросы по теме