* Simplify 404 page * add es array_functions.md * restore some old manual anchors * update sitemaps * trigger checks * restore more old manual anchors * refactor test.md + temporary disable failure again * fix mistype
10 KiB
Funciones de orden superior
->
operador, función lambda (params, expr)
Permite describir una función lambda para pasar a una función de orden superior. El lado izquierdo de la flecha tiene un parámetro formal, que es cualquier ID, o múltiples parámetros formales: cualquier ID en una tupla. El lado derecho de la flecha tiene una expresión que puede usar estos parámetros formales, así como cualquier columnas de tabla.
Ejemplos: x -> 2 * x, str -> str != Referer.
Las funciones de orden superior solo pueden aceptar funciones lambda como su argumento funcional.
Una función lambda que acepta múltiples argumentos se puede pasar a una función de orden superior. En este caso, a la función de orden superior se le pasan varias matrices de idéntica longitud a las que corresponderán estos argumentos.
Para algunas funciones, tales como arrayCount o arraySum, el primer argumento (la función lambda) se puede omitir. En este caso, se supone un mapeo idéntico.
No se puede omitir una función lambda para las siguientes funciones:
- arrayMap
- arrayFilter
- arrayFill
- arrayReverseFill
- arraySplit
- arrayReverseSplit
- arrayFirst
- arrayFirstIndex
¿Cómo puedo hacerlo?, …)
Devuelve una matriz obtenida de la aplicación original func
función a cada elemento en el arr
matriz.
Ejemplos:
SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
┌─res─────┐
│ [3,4,5] │
└─────────┘
En el ejemplo siguiente se muestra cómo crear una tupla de elementos de diferentes matrices:
SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
┌─res─────────────────┐
│ [(1,4),(2,5),(3,6)] │
└─────────────────────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayMap
función.
¿Cómo puedo hacerlo?, …)
Devuelve una matriz que contiene sólo los elementos en arr1
para los cuales func
devuelve algo distinto de 0.
Ejemplos:
SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res
┌─res───────────┐
│ ['abc World'] │
└───────────────┘
SELECT
arrayFilter(
(i, x) -> x LIKE '%World%',
arrayEnumerate(arr),
['Hello', 'abc World'] AS arr)
AS res
┌─res─┐
│ [2] │
└─────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayFilter
función.
¿Cómo puedo hacerlo?, …)
Escanear a través de arr1
desde el primer elemento hasta el último elemento y reemplazar arr1[i]
por arr1[i - 1]
si func
devuelve 0. El primer elemento de arr1
no será reemplazado.
Ejemplos:
SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res──────────────────────────────┐
│ [1,1,3,11,12,12,12,5,6,14,14,14] │
└──────────────────────────────────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayFill
función.
¿Cómo puedo hacerlo?, …)
Escanear a través de arr1
del último elemento al primer elemento y reemplace arr1[i]
por arr1[i + 1]
si func
devuelve 0. El último elemento de arr1
no será reemplazado.
Ejemplos:
SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
┌─res────────────────────────────────┐
│ [1,3,3,11,12,5,5,5,6,14,NULL,NULL] │
└────────────────────────────────────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayReverseFill
función.
¿Cómo puedo hacerlo?, …)
Dividir arr1
en múltiples matrices. Cuando func
devuelve algo distinto de 0, la matriz se dividirá en el lado izquierdo del elemento. La matriz no se dividirá antes del primer elemento.
Ejemplos:
SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res─────────────┐
│ [[1,2,3],[4,5]] │
└─────────────────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arraySplit
función.
¿Cómo puedo hacerlo?, …)
Dividir arr1
en múltiples matrices. Cuando func
devuelve algo distinto de 0, la matriz se dividirá en el lado derecho del elemento. La matriz no se dividirá después del último elemento.
Ejemplos:
SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
┌─res───────────────┐
│ [[1],[2,3,4],[5]] │
└───────────────────┘
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arraySplit
función.
¿Cómo puedo hacerlo?, …)
Devuelve el número de elementos de la matriz arr para los cuales func devuelve algo distinto de 0. Si ‘func’ no se especifica, devuelve el número de elementos distintos de cero en la matriz.
¿Cómo puedo hacerlo?, …)
Devuelve 1 si hay al menos un elemento en ‘arr’ para los cuales ‘func’ devuelve algo distinto de 0. De lo contrario, devuelve 0.
¿Cómo puedo hacerlo?, …)
Devuelve 1 si ‘func’ devuelve algo distinto de 0 para todos los elementos en ‘arr’. De lo contrario, devuelve 0.
¿Cómo puedo hacerlo?, …)
Devuelve la suma de la ‘func’ valor. Si se omite la función, simplemente devuelve la suma de los elementos de la matriz.
¿Cómo puedo hacerlo?, …)
Devuelve el primer elemento en el ‘arr1’ matriz para la cual ‘func’ devuelve algo distinto de 0.
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayFirst
función.
¿Cómo puedo hacerlo?, …)
Devuelve el índice del primer elemento ‘arr1’ matriz para la cual ‘func’ devuelve algo distinto de 0.
Tenga en cuenta que el primer argumento (función lambda) no se puede omitir en el arrayFirstIndex
función.
¿Cómo puedo hacerlo?, …)
Devuelve una matriz de sumas parciales de elementos en la matriz de origen (una suma en ejecución). Si el func
se especifica la función, luego los valores de los elementos de la matriz se convierten mediante esta función antes de sumar.
Ejemplo:
SELECT arrayCumSum([1, 1, 1, 1]) AS res
┌─res──────────┐
│ [1, 2, 3, 4] │
└──────────────┘
Información de archivo)
Lo mismo que arrayCumSum
, devuelve una matriz de sumas parciales de elementos en la matriz de origen (una suma en ejecución). Diferente arrayCumSum
, cuando el valor devuelto contiene un valor menor que cero, el valor se reemplaza con cero y el cálculo posterior se realiza con cero parámetros. Por ejemplo:
SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
┌─res───────┐
│ [1,2,0,1] │
└───────────┘
¿Cómo puedo hacerlo?, …)
Devuelve una matriz como resultado de ordenar los elementos de arr1
en orden ascendente. Si el func
se especifica la función, el orden de clasificación se determina por el resultado de la función func
aplicado a los elementos de la matriz (arrays)
El Transformación de Schwartzian se utiliza para mejorar la eficiencia de clasificación.
Ejemplo:
SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]);
┌─res────────────────┐
│ ['world', 'hello'] │
└────────────────────┘
Para obtener más información sobre el arraySort
método, véase el Funciones para trabajar con matrices apartado.
¿Cómo puedo hacerlo?, …)
Devuelve una matriz como resultado de ordenar los elementos de arr1
en orden descendente. Si el func
se especifica la función, el orden de clasificación se determina por el resultado de la función func
Aplicado a los elementos de la matriz (arrays).
Ejemplo:
SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
┌─res───────────────┐
│ ['hello','world'] │
└───────────────────┘
Para obtener más información sobre el arrayReverseSort
método, véase el Funciones para trabajar con matrices apartado.