1

サンプル データに対する次の SQL Server クエリからカイ 2 乗検定を見つけようとしています。

 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

私は全力を尽くしたので、どうすればこの問題を取り除くことができますか! 私が間違っていることを事前に教えてくれてありがとう!

4

1 に答える 1

3

サンプル データでは cnt が NULL であるため、結果も NULL です。次のように ISNULL を使用して、これらの NULL 値をデフォルト値 (たとえば、1 ではコンテキストがわからない) に置き換えることができます。

SELECT sessionnumber, SUM(ISNULL(cnt, 1)) as cnt FROM clusters GROUP BY sessionnumber
于 2013-08-02T10:47:43.143 に答える