2013-08-02 3 views
0

Я пытаюсь найти тест хи-квадрат из моего следующего SQL Server Query по данным выборки:запросов 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 

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

ответ

2

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

SELECT sessionnumber, SUM(ISNULL(cnt, 1)) as cnt FROM clusters GROUP BY sessionnumber 
+0

I upvoted, но значение по умолчанию, вероятно, '1' и' не 0'. –

+0

Да, наверное, 1, потому что он использует его в подразделении :) Но, как я уже сказал, только пример того, как это сделать. Я только что отредактировал ответ. – Ricardo