Запрос SQL Server для поиска значений CHI-SQUARE (не работает)

Я пытаюсь найти тест Chi-Square из моего следующего запроса SQL Server к образцу данных:

 SELECT sessionnumber, sessioncount, timespent, expected, dev, dev*dev/expected as    chi_square
 FROM (SELECT clusters.sessionnumber, clusters.sessioncount, clusters.timespent,
 (dim1.cnt * dim2.cnt * dim3.cnt)/(dimall.cnt*dimall.cnt) as expected,
 clusters.cnt-(dim1.cnt * dim2.cnt * dim3.cnt)/(dimall.cnt*dimall.cnt) as dev
 FROM clusters JOIN
 (SELECT sessionnumber, SUM(cnt) as cnt FROM clusters
 GROUP BY sessionnumber) dim1 ON clusters.sessionnumber = dim1.sessionnumber JOIN
 (SELECT sessioncount, SUM(cnt) as cnt FROM clusters
 GROUP BY sessioncount) dim2 ON clusters.sessioncount = dim2.sessioncount JOIN
 (SELECT timespent, SUM(cnt) as cnt FROM clusters
 GROUP BY timespent) dim3 ON clusters.timespent = dim3.timespent CROSS JOIN
 (SELECT SUM(cnt) as cnt FROM clusters) dimall) a

В моей таблице есть такие образцы данных:

sessionnumber   sessioncount    timespent       cnt
1                  17               28          NULL
2                  22               8           NULL
3                  1                1           NULL
4                  1                1           NULL
5                  8               111          NULL
6                  8                65          NULL
7                  11               5           NULL
8                  1                1           NULL
9                  62               64          NULL
10                 6                42          NULL

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

sessionnumber   sessioncount    timespent       expected    dev     chi_square
1               17              28              NULL        NULL    NUL
2               22              8               NULL        NULL    NULL
3               1               1               NULL        NULL    NULL
4               1               1               NULL        NULL    NULL
5               8               111             NULL        NULL    NULL
6               8               65              NULL        NULL    NULL
7               11              5               NULL        NULL    NULL
8               1               1               NULL        NULL    NULL
9               62              64              NULL        NULL    NULL
10              6               42              NULL        NULL    NULL

Как я могу избавиться от этой проблемы, потому что я старался изо всех сил! Заранее спасибо, сказав мне, что я делаю неправильно!


person Junaid Hassan    schedule 02.08.2013    source источник


Ответы (1)


В ваших примерах данных cnt равно NULL, поэтому результаты также равны NULL. Вы можете заменить эти значения NULL значением по умолчанию (например, 1, я не знаю, что такое контекст), используя ISNULL, например

SELECT sessionnumber, SUM(ISNULL(cnt, 1)) as cnt FROM clusters GROUP BY sessionnumber
person Ricardo    schedule 02.08.2013
comment
Я проголосовал, но значение по умолчанию, вероятно, 1, а не 0. - person Gordon Linoff; 02.08.2013
comment
Да, наверное 1, потому что он использует его в дивизии :) Но, как я уже сказал, только пример того, как это сделать. Я только что отредактировал ответ. - person Ricardo; 02.08.2013