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)

9. mysql> select array_count(x -> x > 2, [0, 1, 2, 3]);
10. +------------------------------------------------------------+
11. | array_count(array_map([x] -> x(0) > 2, ARRAY(0, 1, 2, 3))) |
12. +------------------------------------------------------------+
13. |                                                          1 |
14. +------------------------------------------------------------+
15. 1 row in set (0.01 sec)

17. mysql> select array_count(x -> x is null, [null, null, null, 1, 2]);
18. +----------------------------------------------------------------------------+
19. | array_count(array_map([x] -> x(0) IS NULL, ARRAY(NULL, NULL, NULL, 1, 2))) |
20. +----------------------------------------------------------------------------+
21. |                                                                          3 |
22. +----------------------------------------------------------------------------+
23. 1 row in set (0.01 sec)

25. mysql> select array_count(x -> power(x,2)>10, [1, 2, 3, 4, 5]);
26. +------------------------------------------------------------------------------+
27. | array_count(array_map([x] -> power(x(0), 2.0) > 10.0, ARRAY(1, 2, 3, 4, 5))) |
28. +------------------------------------------------------------------------------+
29. |                                                                            2 |
30. +------------------------------------------------------------------------------+
31. 1 row in set (0.01 sec)

33. mysql> select *, array_count((x, y) -> x>y, c_array1, c_array2) from array_test;
34. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
35. | id   | c_array1        | c_array2                | array_count(array_map([x, y] -> x(0) > y(1), `c_array1`, `c_array2`)) |
36. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
37. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] |                                                                     2 |
38. |    2 | [6, 7, 8]       | [10, 12, 13]            |                                                                     0 |
39. |    3 | [1]             | [-100]                  |                                                                     1 |
40. |    4 | [1, NULL, 2]    | [NULL, 3, 1]            |                                                                     1 |
41. |    5 | []              | []                      |                                                                     0 |
42. |    6 | NULL            | NULL                    |                                                                     0 |
43. +------+-----------------+-------------------------+-----------------------------------------------------------------------+
44. 6 rows in set (0.02 sec)

keywords

ARRAY, COUNT, ARRAY_COUNT