以下の SQL ステートメントの違いを説明してくれる人はいますか? 違いがあることはわかりますが、異なる結果を生み出す正確な条件を特定することはできません. ちなみに、すべてのIDがすでに一意であるため、このdistinct
句はフィールドに違いをもたらさないと思います。user.id
クエリの目的は、一意の (空でない) 姓の数をカウントすることです。姓が空の場合は、一意としてカウントされます。
この問題の一般的なケースは、case-when ステートメント内での集計関数の使用であると思います。
Case-When 内でカウント:
SELECT
(case when (substr(u.name,40,40) <> ' ')
then count(distinct(substr(u.name,40,40)))
else count(u.id)
end) as "LAST_NAME",
FROM
users u
GROUP BY
substr(u.name,40,40)
Case-When within Count:
SELECT
count (distinct case when (substr(u.name,40,40) <> ' ')
then substr(u.name,40,40)
else to_char(u.id)
end) as "LAST_NAME",
FROM
users u
GROUP BY
substr(u.name,40,40)