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
集計値に興味があるかもしれません。たとえば、アクターの重複数differentある?
_SELECT DISTINCT COUNT(*)
FROM (VALUES('a'), ('a'), ('b'), ('b')) t(actors)
GROUP BY actors
_
回答:
_count
-----
2
_
DISTINCT
を使用して、複数の_GROUP BY
_列を持つ重複を削除しますもちろん、もう1つのケースは次のとおりです。
_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操作の論理的順序(操作の字句順ではなく) 。
おそらくあなたがそれを持っているという文脈ではありませんが、あなたは使うことができます
SELECT DISTINCT col1,
PERCENTILE_CONT(col2) WITHIN GROUP (ORDER BY col2) OVER (PARTITION BY col1),
PERCENTILE_CONT(col2) WITHIN GROUP (ORDER BY col2) OVER (PARTITION BY col1, col3),
FROM TableA
これを使用して、単一行で返されるさまざまなレベルの集計を返します。ユースケースは、単一のグループ化では必要なすべての集計を満たさない場合に使用します。