SQL.Расчет корреляции классов активов - PullRequest
1 голос
/ 10 января 2012

У меня есть база данных с 101 моделированием, скажем, для 5 различных классов активов.

Мне нужно написать запрос, который вычислит соответствующие корреляции между каждым из 5 классов. Таблица будет выглядеть примерно так:

AssetClass_ID | Симуляция | AssetClass_Value

Есть идеи? Я изо всех сил пытаюсь приблизиться.

(В зависимости от сложности я могу в конечном итоге сказать конечному пользователю, что нужно просто загрузить все симуляции и выполнить статистику, используя встроенные функции EXCEL, но я вряд ли буду популярен для этого)

1 Ответ

1 голос
/ 12 января 2012

Хорошо, немного гугла и работы, которую я придумал:

SELECT  
        AssetID_1, AssetID_2,
        ((psum - (sum1 * sum2 / n)) / sqrt((sum1sq - sum1*sum1 / n) * (sum2sq - sum2*sum2 / n))) AS [Correlation Coefficient],
        n
FROM
        (SELECT 
                n1.AssetClass_ID AS AssetID_1,
                n2.AssetClass_ID AS AssetID_2,
                SUM(n1.RunResults_Value) AS sum1,
                SUM(n2.RunResults_Value) AS sum2,
                SUM(n1.RunResults_Value * n1.RunResults_Value) AS sum1sq,
                SUM(n2.RunResults_Value * n2.RunResults_Value) AS sum2sq,
                SUM(n1.RunResults_Value * n2.RunResults_Value) AS psum,
                COUNT(*) AS n
        FROM
                dbo.tbl_RunResults AS n1
                LEFT JOIN dbo.tbl_RunResults AS n2 ON n1.Simulation_ID = n2.Simulation_ID
        WHERE   

                n1.AssetClass_ID  < n2.AssetClass_ID AND
                n1.series_ID = 2332 AND
                n2.series_ID = 2332

    GROUP BY
        n1.AssetClass_ID, n2.AssetClass_ID) AS step1
ORDER BY
        AssetID_1

Ответы пока соответствуют встроенным функциям Excel, так что хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...