位图基数计算函数
位图基数计算函数提供了位图数据基数的计算。seekdb 当前所支持的位图基数计算函数包括 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() 函数返回输入位图数据的基数。语法如下:
rb_cardinality(rb)
示例如下:
SELECT rb_cardinality(rb_from_string('1,2,3'));
+-----------------------------------------+
| rb_cardinality(rb_from_string('1,2,3')) |
+-----------------------------------------+
| 3 |
+-----------------------------------------+
1 row in set (0.001 sec)
rb_and_cardinality 和 rb_and_null2empty_cardinality
rb_and_cardinality() 函数返回两个位图数据做与计算后,得到的新位图数据的基数。语法如下:
rb_and_cardinality(rb1, rb2)
参数 rb1 和 rb2 的顺序不影响结果。
示例如下:
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 (0.001 sec)
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 (0.001 sec)
rb_and_null2empty_cardinality() 函数计算逻辑与 rb_and_cardinality() 一致,但把空输入视为空的位图数据。
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 (0.001 sec)
rb_or_cardinality 和 rb_or_null2empty_cardinality
rb_or_cardinality() 函数返回两个位图数据做或计算后,得到的新位图数据的基数。语法如下:
rb_or_cardinality(rb1, rb2)
参数 rb1 和 rb2 的顺序不影响结果。
示例如下:
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 (0.001 sec)
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 (0.001 sec)
rb_or_null2empty_cardinality() 函数计算逻辑与 rb_or_cardinality() 一致,但把空输入视为空的位图数据。