APPROXCOUNTDISTINCT関数

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

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

APPROXCOUNTDISTINCT関数はHyperLogLogアルゴリズムを使用して絞込みのセットを計算します。重複を除いた値の数が少ない場合、結果は正確です。重複を除いた値の数が多い場合、結果は概数です。

APPROXCOUNTDISTINCTは、空のセットを持つレコードも評価します(つまり、指定した複数割当て属性に対して割当てを持たないレコードに対しては、空のセットを返します)。

APPROXCOUNTDISTINCTの構文

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

APPROXCOUNTDISTINCTの例

WineType=Red (WineTypeは単一割当て属性)の次の9個のレコードがあるとします。各レコードには複数割当てのBody属性に1つまたは2つの割当てが含まれています。
Body                WineID
--------------------------
{ Silky, Tannins }    3
{ Robust, Tannins }   4
{ Silky, Tannins }    5
{ Robust }            6
{ Robust }            8
{ Silky, Tannins }    9
{ Silky, Tannins }   12
{ Silky, Tannins }   16
{ Silky, Tannins }   18
--------------------------
次に示す文は、WineType=RedレコードのBody属性の重複を除いた値の数を返します。
RETURN Result AS
SELECT APPROXCOUNTDISTINCT (Body) AS Total
FROM WineState
WHERE WineType = 'Red'
GROUP BY WineType
文の結果は次のとおりです。
Total=3, WineType=Red
このグループの場合、Body属性に対して一意の値を持つ空ではないセットが3つ存在するためTotalの値は3です。
  • レコード3、5、9、12、16および18のセット。各レコードはBodyに"Silky"および"Tannins"が割り当てられています。
  • レコード6および8のセット。各レコードはBodyに"Robust"が割り当てられています。
  • レコード4のセット。レコード4はBodyに"Robust"および"Tannins"が割り当てられています。

したがって、WineType属性でグルーピングした場合、Body属性の重複を除いた値のセットは3つあります。