1

SQL Serverでクエリを実行して、オーストラリアの州ごとにデータベースに存在する一意の電子メールアドレスの数をカウントしています。ただし、数値を調整して正しいことを確認しようとすると、不一致に気づき、クエリが正しくないと思います。数値と実際の結果を調整するために使用しているクエリは次のとおりです。

/** Count the total number of active members (status=1) since last night **/
SELECT count(distinct(email)) Total FROM [member] WHERE status = 1 
AND (created_datetime <= '2013-01-11' OR created_datetime IS NULL)
/** RESULT: 8958 **/

/** Count the number of active members (status=1) who live in Victoria since last night **/
SELECT count(distinct(email)) Total FROM [member] WHERE status = 1 
AND (created_datetime <= '2013-01-11' OR created_datetime IS NULL)
AND [state] = 'vic'
/** RESULT: 7545 **/

/** Count the number of active members (status=1) who don't live in Victoria since last night **/
SELECT count(distinct(email)) Total FROM [member] WHERE status = 1 
AND (created_datetime <= '2013-01-11' OR created_datetime IS NULL)
AND [state] <> 'vic'
/** RESULT:1446 **/

/** Add the two results to see how they compare to the total **/
SELECT 7545+1446
/** RESULT:8991 **/

個別の電子メールの総数は8958であることに気付くでしょうが、ビクトリアに住んでいるものとビクトリアに住んでいないものを加えると、その数は8991になります。カウント個別関数を間違って使用していますか?

4

4 に答える 4

2

個別のメールをカウントしています。ビクトリア州のユーザーが他の場所のユーザーと同じメールを持っている場合、それらは合計数で 1 としてカウントされます。

ビクトリアとビクトリア以外の電子メールを別々にカウントすると、どちらもそれぞれ 1 としてカウントされ、合計 2 になります (あえて合計すると)。

于 2013-01-11T07:45:20.340 に答える
2

@Raj と @MarkD によって提供された回答に加えて、別の観察結果を追加したいと思います。
すべきではない

OR created_datetime IS NULL

ステートメントの両方ではなく、一方のみに含まれますか? 両方にある場合、重複があり、「合計」クエリの結果が個々のクエリの合計と一致することはありません。

于 2013-01-11T06:04:49.880 に答える
2

where句のcreated_datetimeが異なります。最初のクエリでは、

WHERE status = 1 
AND (created_datetime <= '2013-01-10 23:59:59' OR created_datetime IS NULL)

他の 2 つのクエリについては、

WHERE status = 1 
AND (created_datetime <= '2013-01-31 00:00:00' OR created_datetime IS NULL)
AND [state] <> 'vic'

ラージ

于 2013-01-11T05:59:52.867 に答える
1

そして、 Rajが 指摘するように[State]、クエリの内容は異なります。NULLDATETIME

SELECT count(distinct(email)) Total FROM [member] WHERE status = 1 
AND (created_datetime <= '2013-01-31 00:00:00' OR created_datetime IS NULL)
AND [state] IS NULL
于 2013-01-11T06:00:59.620 に答える