array_count

SinceVersion 2.0

array_count

description

  1. array_count(lambda, array1, ...)

使用lambda表达式作为输入参数,对其他输入ARRAY参数的内部数据进行相应的表达式计算。 返回使得 lambda(array1[i], ...) 返回值不为 0 的元素数量。如果找不到到满足此条件的元素,则返回 0。

lambda表达式中输入的参数为1个或多个,必须和后面输入的数组列数一致,且所有输入的array的元素个数必须相同。在lambda中可以执行合法的标量函数,不支持聚合函数等。

  1. array_count(x->x, array1);
  2. array_count(x->(x%2 = 0), array1);
  3. array_count(x->(abs(x)-1), array1);
  4. array_count((x,y)->(x = y), array1, array2);

example

  1. mysql> select array_count(x -> x, [0, 1, 2, 3]);
  2. +--------------------------------------------------------+
  3. | array_count(array_map([x] -> x(0), ARRAY(0, 1, 2, 3))) |
  4. +--------------------------------------------------------+
  5. | 3 |
  6. +--------------------------------------------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select array_count(x -> x > 2, [0, 1, 2, 3]);
  9. +------------------------------------------------------------+
  10. | array_count(array_map([x] -> x(0) > 2, ARRAY(0, 1, 2, 3))) |
  11. +------------------------------------------------------------+
  12. | 1 |
  13. +------------------------------------------------------------+
  14. 1 row in set (0.01 sec)
  15. mysql> select array_count(x -> x is null, [null, null, null, 1, 2]);
  16. +----------------------------------------------------------------------------+
  17. | array_count(array_map([x] -> x(0) IS NULL, ARRAY(NULL, NULL, NULL, 1, 2))) |
  18. +----------------------------------------------------------------------------+
  19. | 3 |
  20. +----------------------------------------------------------------------------+
  21. 1 row in set (0.01 sec)
  22. mysql> select array_count(x -> power(x,2)>10, [1, 2, 3, 4, 5]);
  23. +------------------------------------------------------------------------------+
  24. | array_count(array_map([x] -> power(x(0), 2.0) > 10.0, ARRAY(1, 2, 3, 4, 5))) |
  25. +------------------------------------------------------------------------------+
  26. | 2 |
  27. +------------------------------------------------------------------------------+
  28. 1 row in set (0.01 sec)
  29. mysql> select *, array_count((x, y) -> x>y, c_array1, c_array2) from array_test;
  30. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
  31. | id | c_array1 | c_array2 | array_count(array_map([x, y] -> x(0) > y(1), `c_array1`, `c_array2`)) |
  32. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
  33. | 1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | 2 |
  34. | 2 | [6, 7, 8] | [10, 12, 13] | 0 |
  35. | 3 | [1] | [-100] | 1 |
  36. | 4 | [1, NULL, 2] | [NULL, 3, 1] | 1 |
  37. | 5 | [] | [] | 0 |
  38. | 6 | NULL | NULL | 0 |
  39. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
  40. 6 rows in set (0.02 sec)

keywords

ARRAY, COUNT, ARRAY_COUNT