---
title: "APPROX_COUNT_DISTINCT - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: APPROX_COUNT_DISTINCT 描述 该函数对参数列去重后的行数进行计算，返回行数值，且该值是近似值，该函数可以用于进一步计算被引用的列的选择性。 与函数 COUNT(DISTINCT x) 相比， APPROX_COUNT_DISTINCT 返回的是近似值，所以计算速度极快。在处理大量级的数据时 COU…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# APPROX_COUNT_DISTINCT

更新时间：2026-04-30 18:31:43

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/500.functions-of-oracle-mode/300.aggregate-functions-of-oracle-mode/100.approx-count-distinct-agg-of-oracle-mode.md)  

## 描述

该函数对参数列去重后的行数进行计算，返回行数值，且该值是近似值，该函数可以用于进一步计算被引用的列的选择性。

与函数 `COUNT(DISTINCT x)` 相比，`APPROX_COUNT_DISTINCT` 返回的是近似值，所以计算速度极快。在处理大量级的数据时 `COUNT(DISTINCT x)` 经常要花费很长的时间，使用 `APPROX_COUNT_DISTINCT` 牺牲了少量的精确度，却换来了计算效率的极大提升。

## 语法

```sql
APPROX_COUNT_DISTINCT(expr)

```

## 参数解释

`expr` 表示去重的数值列。

## 返回类型

返回 `NUMBER` 类型数据。

## 示例

创建表 `tbl1`，并插入十条数据。

```sql
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` 不重复值的个数。

  ```sql
  obclient> SELECT APPROX_COUNT_DISTINCT(col2) FROM tbl1;
  +-----------------------------+
  | APPROX_COUNT_DISTINCT(COL2) |
  +-----------------------------+
  |                           5 |
  +-----------------------------+
  1 row in set

  ```
 - 以列 `col1` 和列 `col2` 分组去重后，统计列 `col1` 中各数值的个数。

  ```sql
  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` 组合值的个数。

  ```sql
  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

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
