ClickHouse/docs/es/sql-reference/functions/conditional-functions.md
Ivan Blinkov cd14f9ebcb
SQL reference refactoring (#10857)
* split up select.md

* array-join.md basic refactoring

* distinct.md basic refactoring

* format.md basic refactoring

* from.md basic refactoring

* group-by.md basic refactoring

* having.md basic refactoring

* additional index.md refactoring

* into-outfile.md basic refactoring

* join.md basic refactoring

* limit.md basic refactoring

* limit-by.md basic refactoring

* order-by.md basic refactoring

* prewhere.md basic refactoring

* adjust operators/index.md links

* adjust sample.md links

* adjust more links

* adjust operatots links

* fix some links

* adjust aggregate function article titles

* basic refactor of remaining select clauses

* absolute paths in make_links.sh

* run make_links.sh

* remove old select.md locations

* translate docs/es

* translate docs/fr

* translate docs/fa

* remove old operators.md location

* change operators.md links

* adjust links in docs/es

* adjust links in docs/es

* minor texts adjustments

* wip

* update machine translations to use new links

* fix changelog

* es build fixes

* get rid of some select.md links

* temporary adjust ru links

* temporary adjust more ru links

* improve curly brace handling

* adjust ru as well

* fa build fix

* ru link fixes

* zh link fixes

* temporary disable part of anchor checks
2020-05-15 07:34:54 +03:00

6.2 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 43 Condicional

Funciones condicionales

si

Controla la bifurcación condicional. A diferencia de la mayoría de los sistemas, ClickHouse siempre evalúa ambas expresiones then y else.

Sintaxis

SELECT if(cond, then, else)

Si la condición cond evalúa a un valor distinto de cero, devuelve el resultado de la expresión then y el resultado de la expresión else si está presente, se omite. Si el cond es cero o NULL el resultado de la then expresión se omite y el resultado de la else expresión, si está presente, se devuelve.

Parámetros

  • cond The condition for evaluation that can be zero or not. The type is UInt8, Nullable(UInt8) or NULL.
  • then - La expresión que se va a devolver si se cumple la condición.
  • else - La expresión a devolver si no se cumple la condición.-

Valores devueltos

La función se ejecuta then y else expresiones y devuelve su resultado, dependiendo de si la condición cond terminó siendo cero o no.

Ejemplo

Consulta:

SELECT if(1, plus(2, 2), plus(2, 6))

Resultado:

┌─plus(2, 2)─┐
│          4 │
└────────────┘

Consulta:

SELECT if(0, plus(2, 2), plus(2, 6))

Resultado:

┌─plus(2, 6)─┐
│          8 │
└────────────┘
  • then y else debe tener el tipo común más bajo.

Ejemplo:

Toma esto LEFT_RIGHT tabla:

SELECT *
FROM LEFT_RIGHT

┌─left─┬─right─┐
 ᴺᵁᴸᴸ      4 
    1      3 
    2      2 
    3      1 
    4   ᴺᵁᴸᴸ 
└──────┴───────┘

La siguiente consulta compara left y right valor:

SELECT
    left,
    right,
    if(left < right, 'left is smaller than right', 'right is greater or equal than left') AS is_smaller
FROM LEFT_RIGHT
WHERE isNotNull(left) AND isNotNull(right)

┌─left─┬─right─┬─is_smaller──────────────────────────┐
    1      3  left is smaller than right          
    2      2  right is greater or equal than left 
    3      1  right is greater or equal than left 
└──────┴───────┴─────────────────────────────────────┘

Nota: NULL los valores no se utilizan en este ejemplo, compruebe Valores NULL en condicionales apartado.

Operador ternario

Funciona igual que if función.

Sintaxis: cond ? then : else

Devoluciones then si el cond evalúa que es verdadero (mayor que cero), de lo contrario devuelve else.

  • cond debe ser de tipo de UInt8, y then y else debe tener el tipo común más bajo.

  • then y else puede ser NULL

Ver también

MultiIf

Le permite escribir el CASE operador más compacto en la consulta.

Sintaxis: multiIf(cond_1, then_1, cond_2, then_2, ..., else)

Parámetros:

  • cond_N — The condition for the function to return then_N.
  • then_N — The result of the function when executed.
  • else — The result of the function if none of the conditions is met.

La función acepta 2N+1 parámetros.

Valores devueltos

La función devuelve uno de los valores then_N o else dependiendo de las condiciones cond_N.

Ejemplo

De nuevo usando LEFT_RIGHT tabla.

SELECT
    left,
    right,
    multiIf(left < right, 'left is smaller', left > right, 'left is greater', left = right, 'Both equal', 'Null value') AS result
FROM LEFT_RIGHT

┌─left─┬─right─┬─result──────────┐
 ᴺᵁᴸᴸ      4  Null value      
    1      3  left is smaller 
    2      2  Both equal      
    3      1  left is greater 
    4   ᴺᵁᴸᴸ  Null value      
└──────┴───────┴─────────────────┘

Uso directo de resultados condicionales

Los condicionales siempre dan como resultado 0, 1 o NULL. Entonces puedes usar resultados condicionales directamente como este:

SELECT left < right AS is_small
FROM LEFT_RIGHT

┌─is_small─┐
     ᴺᵁᴸᴸ 
        1 
        0 
        0 
     ᴺᵁᴸᴸ 
└──────────┘

Valores NULL en condicionales

Cuando NULL están involucrados en condicionales, el resultado también será NULL.

SELECT
    NULL < 1,
    2 < NULL,
    NULL < NULL,
    NULL = NULL

┌─less(NULL, 1)─┬─less(2, NULL)─┬─less(NULL, NULL)─┬─equals(NULL, NULL)─┐
 ᴺᵁᴸᴸ           ᴺᵁᴸᴸ           ᴺᵁᴸᴸ              ᴺᵁᴸᴸ               
└───────────────┴───────────────┴──────────────────┴────────────────────┘

Por lo tanto, debe construir sus consultas cuidadosamente si los tipos son Nullable.

El siguiente ejemplo demuestra esto al no agregar la condición equals a multiIf.

SELECT
    left,
    right,
    multiIf(left < right, 'left is smaller', left > right, 'right is smaller', 'Both equal') AS faulty_result
FROM LEFT_RIGHT

┌─left─┬─right─┬─faulty_result────┐
 ᴺᵁᴸᴸ      4  Both equal       
    1      3  left is smaller  
    2      2  Both equal       
    3      1  right is smaller 
    4   ᴺᵁᴸᴸ  Both equal       
└──────┴───────┴──────────────────┘

Artículo Original