メインコンテンツまでスキップ

map_filter

map_filter

概要

マップ内のキーと値のペアをブール値の配列またはラムダ式を適用してフィルタリングします。ブール値が true と評価されるペアが返されます。

この関数はv3.1以降でサポートされています。

構文

MAP map_filter(any_map, array<boolean>)
MAP map_filter(lambda_func, any_map)
  • map_filter(any_map, array<boolean>)any_map 内のキーと値のペアを array<boolean> に対して順番に評価し、評価結果が true となるキーと値のペアを返します。
  • map_filter(lambda_func, any_map)any_map 内のキーと値のペアに lambda_func を適用し、結果が true となるキーと値のペアを返します。

パラメータ

  • any_map: マップの値。
  • array<boolean>: マップの値を評価するために使用されるブール値の配列。
  • lambda_func: マップの値を評価するために使用されるラムダ式。

戻り値

データ型が any_map と同じであるマップが返されます。

any_map が NULL の場合、NULL が返されます。array<boolean> が null の場合、空のマップが返されます。

マップの値のキーまたは値が NULL の場合、NULL は通常の値として処理されます。

ラムダ式は2つのパラメータを持つ必要があります。最初のパラメータはキーを表し、2番目のパラメータは値を表します。

array<boolean> の使用

次の例では、map_from_arrays() を使用してマップ値 {1:"ab",3:"cdd",2:null,null:"abc"} を生成します。それから、各キーと値のペアを array<boolean> に対して評価し、結果が true となるペアを返します。

mysql> select map_filter(col_map, array<boolean>[0,0,0,1,1]) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+----------------------------------------------------+
| map_filter(col_map, ARRAY<BOOLEAN>[0, 0, 0, 1, 1]) |
+----------------------------------------------------+
| {null:"abc"} |
+----------------------------------------------------+
1 row in set (0.02 sec)

mysql> select map_filter(null, array<boolean>[0,0,0,1,1]);
+-------------------------------------------------+
| map_filter(NULL, ARRAY<BOOLEAN>[0, 0, 0, 1, 1]) |
+-------------------------------------------------+
| NULL |
+-------------------------------------------------+
1 row in set (0.02 sec)

mysql> select map_filter(col_map, null) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+---------------------------+
| map_filter(col_map, NULL) |
+---------------------------+
| {} |
+---------------------------+
1 row in set (0.01 sec)

ラムダ式の使用

次の例では、map_from_arrays() を使用してマップ値 {1:"ab",3:"cdd",2:null,null:"abc"} を生成します。それから、各キーと値のペアをラムダ式に対して評価し、値が null ではないキーと値のペアを返します。


mysql> select map_filter((k,v) -> v is not null,col_map) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+------------------------------------------------+
| map_filter((k,v) -> v is not null, col_map) |
+------------------------------------------------+
| {1:"ab",3:"cdd",null:'abc'} |
+------------------------------------------------+
1 row in set (0.02 sec)