1. ホーム
  2. sql-server

[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する

2022-03-07 13:09:45

質問

SQLでDISTINCTとGROUP BYの両方を使用する目的は何ですか?

以下はサンプルコードです。

SELECT DISTINCT Actors
FROM MovieDetails
GROUP BY Actors

DISTINCT と GROUP BY の両方を使用して、特定の結果を得る必要がある状況を知っている人はいますか?

(DISTINCTとGROUP BYの一般的な使い分けは理解できるのですが...。)

どのように解決するのですか?

使用方法 DISTINCT を使用すると、重複する GROUPING SETS を削除します。 GROUP BY

を使用した全く馬鹿げた例です。 GROUPING SETS() を一般的に使用します(または、特殊なグループ化セット ROLLUP() または CUBE() を使用すると、特に DISTINCT を使うことで、グループ化セットで生成された重複する値を再度削除することができます。

SELECT DISTINCT actors
FROM (VALUES('a'), ('a'), ('b'), ('b')) t(actors)
GROUP BY CUBE(actors, actors)

DISTINCT :

actors
------
NULL
a
b

なし DISTINCT :

actors
------
a
b
NULL
a
b
a
b

しかし、学術的な指摘を除けば、なぜそんなことをするのでしょうか?

使用方法 DISTINCT 一意な集計関数の値を見つけるために

あまり突飛でない例では、以下のようなものがあります。 DISTINCT というような集計値。 異なる 俳優の人数が重複している?

SELECT DISTINCT COUNT(*)
FROM (VALUES('a'), ('a'), ('b'), ('b')) t(actors)
GROUP BY actors

答えてください。

count
-----
2

使用方法 DISTINCT を使用すると、2つ以上の重複を削除することができます。 GROUP BY

もうひとつ、もちろんこのようなケースもあります。

SELECT DISTINCT actors, COUNT(*)
FROM (VALUES('a', 1), ('a', 1), ('b', 1), ('b', 2)) t(actors, id)
GROUP BY actors, id

DISTINCT :

actors  count
-------------
a       2
b       1

なし DISTINCT :

actors  count
-------------
a       2
b       1
b       1

詳しくは、以下のようなブログ記事を書いています。 について GROUPING SETS と、それらがどのように影響するのか GROUP BY 操作 または SQL操作の論理的な順序について(操作の語彙的な順序とは対照的です) .