

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# COUNT 函数
<a name="r_COUNT"></a>

 COUNT 函数对由表达式定义的行计数。

COUNT 函数具有以下变体。
+ COUNT ( \$1 ) 对目标表中的所有行计数，无论它们是否包含 null 值。
+ COUNT ( *expression* ) 计算某个特定列或表达式中带非 NULL 值的行的数量。
+ COUNT ( DISTINCT *expression* ) 计算某个列或表达式中非重复的非 NULL 值的数量。
+ APPROXIMATE COUNT DISTINCT 估算某个列或表达式中非重复的非 NULL 值的数量。

## 语法
<a name="r_COUNT-synopsis"></a>

```
COUNT( * | expression )
```

```
COUNT ( [ DISTINCT | ALL ] expression )
```

```
APPROXIMATE COUNT ( DISTINCT expression )
```

## 参数
<a name="r_COUNT-arguments"></a>

 *expression*   
对其执行函数的目标列或表达式。COUNT 函数支持所有参数数据类型。

DISTINCT \$1 ALL  
利用参数 DISTINCT，该函数可在执行计数之前消除指定表达式中的所有重复值。利用参数 ALL，该函数可保留表达式中的所有重复值以进行计数。ALL 是默认值。

APPROXIMATE  
与 APPROXIMATE 结合使用时，COUNT DISTINCT 函数使用 HyperLogLog 算法来估算某个列或表达式中非重复的非 NULL 值的数量。使用 APPROXIMATE 关键字的查询，运行速度会快得多，错误率相对较低，约为 2%。返回大量非重复值的查询可提供近似值，每个查询或组（如果有按子句划分的组）中有几百万或更多非重复值。对于较少数量（以千为单位）的非重复值，近似值计算可能慢于精确计数。APPROXIMATE 只能与 COUNT DISTINCT 结合使用。

## 返回类型
<a name="c_Supported_data_types_count"></a>

COUNT 函数返回 BIGINT。

## 示例
<a name="r_COUNT-examples"></a>

对来自佛罗里达州的所有用户计数：

```
select count(*) from users where state='FL';

count
-------
510
```

对 EVENT 表中的所有事件名称计数：

```
select count(eventname) from event;

count
-------
8798
```

对 EVENT 表中的所有事件名称计数：

```
select count(all eventname) from event;

count
-------
8798
```

对 EVENT 表中的所有唯一场地 ID 计数：

```
select count(distinct venueid) as venues from event;

venues
--------
204
```

计算每个卖家列出 4 张以上门票出售的批次的次数。按卖家 ID 对结果进行分组：

```
select count(*), sellerid from listing 
where numtickets > 4
group by sellerid
order by 1 desc, 2;

count | sellerid
------+----------
12    |    6386
11    |    17304
11    |    20123
11    |    25428
...
```

以下示例比较 COUNT 和 APPROXIMATE COUNT 的返回值与执行时间。

```
select  count(distinct pricepaid) from sales;
              
count
-------
  4528


Time: 48.048 ms

               
select approximate count(distinct pricepaid) from sales;

count
-------
  4553


Time: 21.728 ms
```