此查询:
SELECT count(distinct
field1,
field2,
field3,
field4)
FROM SOME_TABLE
返回与此查询不同(更小)的计数:
SELECT count(distinct
coalesce(field1,"null"),
coalesce(field2,"null"),
coalesce(field3,"null"),
coalesce(field4,"null"))
FROM SOME_TABLE
我希望结果是相同的。对此有解释吗?
答案 0 :(得分:3)
您看到不同结果的原因是两件事:
COUNT(DISTINCT(...)
仅在所有指定字段为非null时计算不同的值。
fieldn
值时,你会说"当fieldn
为空时,给我字符串" null",否则给我{ {1}}" 我最近也试图验证我对此的假设,并且无法在任何地方明确地说明它。但是说你有这样的表(下面的空值是空值,而不是字符串null):
fieldn
然后:
-----------------
|field1 |field2 |
-----------------
|foo |null |
|null |foo |
-----------------
= 2 count(field1)
= 1 count(distinct field1)
= 2(' foo'和' bar' distinct)count(distinct coalesce(field1, 'bar'))
= 0(两者都不为空的组合)