説明
この関数は、パラメータ列の重複を除いた行数を計算し、その近似値を返します。この関数は、参照される列の選択性をさらに計算するために使用できます。
関数 COUNT(DISTINCT x) と比較して、APPROX_COUNT_DISTINCT は近似値を返すため、計算速度が非常に速いです。大量のデータを処理する場合、COUNT(DISTINCT x) はしばしば長時間を要しますが、APPROX_COUNT_DISTINCT を使用することで、わずかな精度を犠牲にしても計算効率が大幅に向上します。
構文
APPROX_COUNT_DISTINCT(expr)
パラメータの説明
expr は重複を除いた数値列を表します。
戻り値のタイプ
NUMBER タイプのデータを返します。
例
テーブル tbl1 を作成し、10件のデータを挿入します。
obclient> CREATE TABLE tbl1 (col1 INT,col2 INT,col3 varchar(10));
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES (1,10,'a'),(2,20,'b'),(3,30,'c'),
(4,40,'a'),(5,50,'c'),(1,10,'a'),(2,20,'b'),(3,30,'c'),(4,30,'a'),(5,40,'b');
Query OK, 10 rows affected
Records: 10 Duplicates: 0 Warnings: 0
返される列
col2の重複しない値の数を返します。obclient> SELECT APPROX_COUNT_DISTINCT(col2) FROM tbl1; +-----------------------------+ | APPROX_COUNT_DISTINCT(COL2) | +-----------------------------+ | 5 | +-----------------------------+ 1 row in set列
col1と列col2でグループ化して重複を削除した後、列col1内の各数値の個数を集計します。obclient> SELECT col1,APPROX_COUNT_DISTINCT(col2) FROM tbl1 GROUP BY col1; +------+-----------------------------+ | COL1 | APPROX_COUNT_DISTINCT(COL2) | +------+-----------------------------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 2 | +------+-----------------------------+ 5 rows in set列
col1、列col2、およびcol3でグループ化して重複を削除した後、列col1と列col3の組み合わせ値の個数を集計します。obclient> SELECT col1,col3,APPROX_COUNT_DISTINCT(col2) FROM tbl1 GROUP BY col1,col3; +------+------+-----------------------------+ | COL1 | COL3 | APPROX_COUNT_DISTINCT(COL2) | +------+------+-----------------------------+ | 1 | a | 1 | | 2 | b | 1 | | 3 | c | 1 | | 4 | a | 2 | | 5 | b | 1 | | 5 | c | 1 | +------+------+-----------------------------+ 6 rows in set