---
title: github-fill
description: 位图基数计算函数 位图基数计算函数提供了位图数据基数的计算。OceanBase 数据库当前所支持的位图基数计算函数包括 rb_cardinality() 、 rb_and_cardinality() 、 rb_or_cardinality() 、 rb_xor_cardinality() 、 rb_andnot_ca…
---
切换语言

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

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

# 位图基数计算函数

更新时间：2026-07-15 20:42:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/400.functions-of-mysql-mode/940.roaring-bitmap-functions-of-mysql-mode/300.roaring-bitmap-cardinality-calculation-functions-of-mysql-mode.md)  

位图基数计算函数提供了位图数据基数的计算。OceanBase 数据库当前所支持的位图基数计算函数包括 `rb_cardinality()`、`rb_and_cardinality()`、`rb_or_cardinality()`、`rb_xor_cardinality()`、`rb_andnot_cardinality()`、`rb_and_null2empty_cardinality()`、`rb_or_null2empty_cardinality()`、`rb_andnot_null2empty_cardinality()`、`rb_or_cardinality_agg()` 和 `rb_and_cardinality_agg()`。

## rb_cardinality

`rb_cardinality()` 函数返回输入位图数据的基数。语法如下：

```sql
rb_cardinality(rb)

```

示例如下：

```sql
SELECT rb_cardinality(rb_from_string('1,2,3'));
+-----------------------------------------+
| rb_cardinality(rb_from_string('1,2,3')) |
+-----------------------------------------+
|                                       3 |
+-----------------------------------------+
1 row in set

```

## rb_and_cardinality 和 rb_and_null2empty_cardinality

`rb_and_cardinality()` 函数返回两个位图数据做与计算后，得到的新位图数据的基数。语法如下：

```sql
rb_and_cardinality(rb1, rb2)

```

参数 `rb1` 和 `rb2` 的顺序不影响结果。

示例如下：

```sql
SELECT rb_and_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+----------------------------------------------------------------------+
| rb_and_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+----------------------------------------------------------------------+
|                                                                    2 |
+----------------------------------------------------------------------+
1 row in set

```

```sql
SELECT rb_and_cardinality(rb_from_string('1,2,3'), NULL);
+---------------------------------------------------+
| rb_and_cardinality(rb_from_string('1,2,3'), NULL) |
+---------------------------------------------------+
|                                              NULL |
+---------------------------------------------------+
1 row in set

```

`rb_and_null2empty_cardinality()` 函数计算逻辑与 `rb_and_cardinality()` 一致，但把空输入视为空的位图数据。

```sql
SELECT rb_and_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+--------------------------------------------------------------+
| rb_and_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+--------------------------------------------------------------+
|                                                            0 |
+--------------------------------------------------------------+
1 row in set

```

## rb_or_cardinality 和 rb_or_null2empty_cardinality

`rb_or_cardinality()` 函数返回两个位图数据做或计算后，得到的新位图数据的基数。语法如下：

```sql
rb_or_cardinality(rb1, rb2)

```

示例如下：

```sql
SELECT rb_or_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+---------------------------------------------------------------------+
| rb_or_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+---------------------------------------------------------------------+
|                                                                   4 |
+---------------------------------------------------------------------+
1 row in set

```

```sql
SELECT rb_or_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+-------------------------------------------------------------+
| rb_or_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+-------------------------------------------------------------+
|                                                           3 |
+-------------------------------------------------------------+
1 row in set

```

`rb_or_null2empty_cardinality()` 函数计算逻辑与 `rb_or_cardinality()` 一致，但把空输入视为空的位图数据。

## rb_xor_cardinality

`rb_xor_cardinality()` 函数返回两个位图数据做异或计算后，得到的新位图数据的基数。语法如下：

```sql
rb_xor_cardinality(rb1, rb2)

```

示例如下：

```sql
SELECT rb_xor_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+----------------------------------------------------------------------+
| rb_xor_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+----------------------------------------------------------------------+
|                                                                    2 |
+----------------------------------------------------------------------+
1 row in set

```

## rb_andnot_cardinality 和 rb_andnot_null2empty_cardinality

`rb_andnot_cardinality()` 函数返回两个位图数据做与非计算后，得到的新位图数据的基数。语法如下：

```sql
rb_andnot_cardinality(rb1, rb2)

```

该函数将以参数 `rb1` 为计算基础，计算其与 `rb2` 的差，即返回的是位图数据值 `rb1 - rb2` 的基数。

示例如下：

```sql
SELECT rb_andnot_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4'));
+-------------------------------------------------------------------------+
| rb_andnot_cardinality(rb_from_string('1,2,3'), rb_from_string('2,3,4')) |
+-------------------------------------------------------------------------+
|                                                                       1 |
+-------------------------------------------------------------------------+
1 row in set

```

```sql
SELECT rb_andnot_null2empty_cardinality(rb_from_string('1,2,3'), NULL);
+-----------------------------------------------------------------+
| rb_andnot_null2empty_cardinality(rb_from_string('1,2,3'), NULL) |
+-----------------------------------------------------------------+
|                                                               3 |
+-----------------------------------------------------------------+
1 row in set

```

`rb_andnot_null2empty_cardinality()` 函数计算逻辑与 `rb_andnot_cardinality()` 一致，但把空输入视为空的位图数据。

## rb_or_cardinality_agg

`rb_or_cardinality_agg()` 函数用于计算位图列的并集基数。语法如下：

```sql
rb_or_cardinality_agg(rb)

```

该函数输入参数为一个位图列。

返回这些位图列的并集基数。

示例如下：

```sql
CREATE TABLE t1(rb roaringbitmap);

INSERT INTO t1 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));

SELECT rb_or_cardinality_agg(rb) FROM t1;
+---------------------------+
| rb_or_cardinality_agg(rb) |
+---------------------------+
|                         4 |
+---------------------------+
1 row in set

```

## rb_and_cardinality_agg

`rb_and_cardinality_agg()` 函数用于计算位图列的交集基数。语法如下：

```sql
rb_and_cardinality_agg(rb)

```

返回这些位图列的交集基数。

示例如下：

```sql
CREATE TABLE t2(rb roaringbitmap);

INSERT INTO t2 VALUES (rb_from_string('1,2,3')),(rb_from_string('2,3,4'));

SELECT rb_and_cardinality_agg(rb) FROM t2;
+----------------------------+
| rb_and_cardinality_agg(rb) |
+----------------------------+
|                          2 |
+----------------------------+
1 row 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) 咨询热线
