COUNTDISTINCT関数

COUNTDISTINCT関数は、特定の属性の、重複を除いた値の数を数えます。

COUNTDISTINCT関数は、特定のフィールドの、重複を除いた値の数をGROUP BYの結果ごとに返します。COUNTDISTINCTは、単一割当て属性および複数割当て属性の両方で使用できます。

セットはNULLにはなりませんが、空にはなる可能性があるため、COUNTDISTINCTは、空のセットを持つレコードも評価します(つまり、指定した複数割当て属性に対して割当てを持たないレコードに対しては、空のセットを返します)。結果から空のセットを無視する方法は、下の2番目の例を参照してください。

COUNTDISTINCT関数の構文は次のとおりです。
COUNTDISTINCT(<attribute>)
ここで、attributeは、複数割当て属性または単一割当て属性です。

COUNTDISTINCTの例

次のレコードには、単一割当て属性Sizeおよび複数割当て属性Colorが含まれています。
Record 1: Size=small, Color=red
Record 2: Size=small, Color=blue
Record 3: Size=small, Color=red
Record 4: Size=small
次に示す文は、サイズごとに、Color属性の重複を除いた値の数を返します。
RETURN Result AS 
SELECT COUNTDISTINCT (Color) as Total
FROM ProductState 
GROUP BY Size
文の結果は次のとおりです。
Record 1: Size=small, Total=3

Sizeの値がすべてのレコードで同一であるため、グループは1つのみであり、したがって1レコードしか存在しません。このグループの場合、Color属性に対して独自の値を持つ空ではないセットが2つ存在する(redおよびblue)ためTotalの値は3となり、レコード4には空のセットが返されます。

COUNTDISTINCTを複数割当て属性で使用して、空のセットを除外する必要がある場合は、次の例に示すように、IS NOT EMPTY関数でWHERE句を使用します。
RETURN Result AS
SELECT COUNTDISTINCT(Color) WHERE (Color IS NOT EMPTY) AS Total
FROM ProductState
GROUP BY Size
この文の結果は次のようになります。
Record 1: Size=small, Total=2
これは、レコード4の空のセットが数えられていないためです。