COUNT関数とCOUNTDISTINCT関数

COUNT関数は、特定の属性の値を持つレコードの数を返します。COUNTDISTINCTは、特定の属性の、重複を除いた値の数を数えます。

属性値を持つレコードの数を数えるためのCOUNTの使用

COUNT関数は、特定のフィールドの値がNULL以外であるレコードの数を、GROUP BYの結果ごとに数えます。

たとえば、次に示すレコードにはSize属性とColor属性があります。
Record 1: Size=small, Color=red, Color=white 
Record 2: Size=small, Color=blue, Color=green 
Record 3: Size=small, Color=black 
Record 4: Size=small 
次に示す文は、Color属性の値を持つレコードの数をサイズごとに返します。
RETURN result AS
SELECT COUNT(Color) AS Total
GROUP BY Size
文の結果は次のとおりです。
Record 1: Size=small, Total=3

Sizeの値がすべてのレコードで同一であるため、グループは1つのみであり、したがって1レコードしか存在しません。このグループのTotalの値は3です。Colorが割り当てられているのは3レコードのみであるからです。

COUNT(1)構文ではすべてのレコードが返されます。これには、NULL値を持つレコードも含まれます。たとえば、データ・ストア内のレコードの数を知るには、次のようにします。
RETURN results AS
SELECT COUNT(1) AS recordCount
GROUP

文の結果は、データセット内のレコードの総数を表す整数になるはずです。

特定の属性の重複を除いた値の数を数えるためのCOUNTDISTINCTの使用

COUNTDISTINCT関数は、特定のフィールドの、重複を除いた値の数をGROUP BYの結果ごとに返します。

COUNTDISTINCTを使用できるのは単一割当て属性に対してのみであり、複数割当て属性には使用できません。複数割当て属性を使用すると、誤解を招く結果が生成されます。

たとえば、次のレコードがあるとします。
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 
GROUP BY Size
文の結果は次のとおりです。
Record 1: Size=small, Total=2

Sizeの値がすべてのレコードで同一であるため、グループは1つのみであり、したがって1レコードしか存在しません。このグループのTotalの値は2です。Color属性の値は、重複を除くとredとblueの2つになるからです。

コーパスでCOUNTDISTINCTを使用する際には注意が必要です。たとえば、次の文では、
SELECT COUNTDISTINCT(multiassign_attr) AS n FROM AllBaseRecords
集計の前に複数割当てが解除されるため、正しい回答が返されません。

適切な処理方法は、次に示すように、属性でグルーピングしてからその結果をカウントすることです。
DEFINE a AS SELECT 1 AS n
FROM AllBaseRecords
GROUP BY multiassign_attr; 

RETURN b AS 
SELECT COUNT(n) AS n 
FROM a