これらのクエリで無意味な表/列名が使用されていることを前向きにお詫び申し上げます。あなたがRemedyのDBバックエンドで作業したことがあるなら、あなたは理解するでしょう。Count Distinct(pl sql)でヌル値が返される
私は実際の値が20のどこかにあるはずだと思うとCount Distinctがnull値を返すという問題があります(23、私は信じています)。以下は、一連のクエリとその戻り値です。
SELECT count(distinct t442.c1)
FROM t442, t658, t631
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
結果= 497
テーブルt649を追加し、それがテーブルT442に戻ってリンクされたレコードを持っていることを確認してください。
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
結果= 263
テーブル内のレコードをフィルタリングt649コラムc536870939 < = 1:
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
HAVINGステートメントの
結果= 24
フィルタ:= nullを
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
HAVING COUNT (DISTINCT t631.c536870922) =
COUNT (DISTINCT t649.c536870931)
結果。
次のクエリを実行した場合、結果リストに何らかの戻り値が得られない理由がわかりません。これは、SELECTからDISTINCTを削除しても当てはまります。 (私はそれぞれ25と4265行のデータを取得します)。
SELECT DISTINCT t442.c1, t631.c536870922, t649.c536870931
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
私は正確にnull値を返すと、それは完全に正常に動作しているもののようクエリを設定している他のいくつかの場所がある - 正しい値であり、使用可能な番号を返します。私は、この状況で一意であるものは、実際のクエリではなくデータに関連していると仮定しなければならないと思いますが、データで何を調べて説明するのかはわかりません。私は、集計前に生データ内にヌル値を見つけることができませんでした。他に何が起こるか分からない。
ご協力いただければ幸いです。
HAVINGステートメントのt631のカウントは、実際にはt649のカウントと同じですか? – northpole
選択と実行の両方のカウントの区別を入れます。カウントは一致しますか?そうでなければ結果が得られません。 – xQbert