Saltar al contenido principal

Descripción general

Uso directo de resultados condicionales

Los condicionales siempre devuelven 0, 1 o NULL. Por lo tanto, puedes usar los resultados condicionales directamente así:

Valores NULL en las expresiones condicionales

Cuando intervienen valores NULL en expresiones condicionales, el resultado también será NULL.
Por lo tanto, debes construir tus consultas con cuidado si los tipos son Nullable. El siguiente ejemplo lo demuestra al no añadir una condición de igualdad a multiIf.

sentencia CASE

La expresión CASE en ClickHouse ofrece una lógica condicional similar al operador CASE de SQL. Evalúa las condiciones y devuelve valores en función de la primera condición que se cumple. ClickHouse admite dos formas de CASE:
  1. CASE WHEN ... THEN ... ELSE ... END
    Esta forma ofrece total flexibilidad y se implementa internamente mediante la función multiIf. Cada condición se evalúa de forma independiente, y las expresiones pueden incluir valores no constantes.
  1. CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
    Esta forma más compacta está optimizada para comparar valores constantes y utiliza internamente caseWithExpression().
Por ejemplo, lo siguiente es válido:
Esta forma tampoco requiere que las expresiones de retorno sean constantes.

Consideraciones

ClickHouse determina el tipo de resultado de una expresión CASE (o su equivalente interno, como multiIf) antes de evaluar cualquier condición. Esto es importante cuando las expresiones de retorno difieren en el tipo, por ejemplo, con distintas zonas horarias o tipos numéricos.
  • El tipo de resultado se elige en función del tipo compatible más amplio entre todas las ramas.
  • Una vez elegido este tipo, todas las demás ramas se convierten implícitamente a él, aunque su lógica nunca llegue a ejecutarse en tiempo de ejecución.
  • En tipos como DateTime64, donde la zona horaria forma parte de la firma del tipo, esto puede dar lugar a comportamientos inesperados: la primera zona horaria encontrada puede usarse para todas las ramas, incluso cuando otras ramas especifican zonas horarias diferentes.
Por ejemplo, a continuación todas las filas devuelven la marca temporal en la zona horaria de la primera rama coincidente, es decir, Asia/Kolkata
Aquí, ClickHouse ve varios tipos de retorno DateTime64(3, <timezone>). Infiere que el tipo común es DateTime64(3, 'Asia/Kolkata' por ser el primero que encuentra, y convierte implícitamente las demás ramas a este tipo. Esto puede solucionarse convirtiéndolo en una cadena para conservar el formato de zona horaria previsto:

clamp

Introducido en: v24.5.0 Limita un valor para que se mantenga dentro de los límites mínimo y máximo especificados. Si el valor es menor que el mínimo, devuelve el mínimo. Si el valor es mayor que el máximo, devuelve el máximo. De lo contrario, devuelve el propio valor. Todos los argumentos deben ser de tipos comparables. El tipo de resultado es el tipo compatible de mayor tamaño entre todos los argumentos. Sintaxis
Argumentos
  • value — El valor que se va a acotar. - min — El límite mínimo. - max — El límite máximo.
Valor devuelto Devuelve el valor restringido al rango [min, max]. Ejemplos Uso básico
Query
Response
Valor inferior al mínimo
Query
Response
Valor superior al máximo
Query
Response

greatest

Introducido en: v1.1.0 Devuelve el valor máximo entre los argumentos. Los argumentos NULL se ignoran.
  • Para arrays, devuelve el array lexicográficamente mayor.
  • Para los tipos DateTime, el tipo del resultado se amplía al tipo más grande (p. ej., DateTime64 si se mezcla con DateTime32).
Use la configuración least_greatest_legacy_null_behavior para cambiar el comportamiento de NULLLa versión 24.12 introdujo un cambio incompatible con versiones anteriores por el que los valores NULL se ignoran, mientras que antes devolvía NULL si uno de los argumentos era NULL. Para conservar el comportamiento anterior, establezca la configuración least_greatest_legacy_null_behavior (valor predeterminado: false) en true.
Sintaxis
Argumentos
  • x1[, x2, ...] — Uno o varios valores para comparar. Todos los argumentos deben ser de tipos comparables. Any
Valor devuelto Devuelve el valor más alto entre los argumentos, promovido al tipo compatible de mayor tamaño. Any Ejemplos Tipos numéricos
Query
Response
Arrays
Query
Response
Tipos de DateTime
Query
Response

if

Introducido en: v1.1.0 Realiza una bifurcación condicional.
  • Si la condición cond se evalúa como un valor distinto de cero, la función devuelve el resultado de la expresión then.
  • Si cond se evalúa como cero o NULL, se devuelve el resultado de la expresión else.
La configuración short_circuit_function_evaluation controla si se utiliza la evaluación de cortocircuito. Si está habilitada, la expresión then se evalúa solo en las filas en las que cond es verdadero, y la expresión else, en las que cond es falso. Por ejemplo, con la evaluación de cortocircuito, no se produce ninguna excepción por división entre cero al ejecutar la siguiente consulta:
then y else deben ser de tipo similar. Sintaxis
Argumentos
  • cond — La condición evaluada. UInt8 o Nullable(UInt8) o NULL
  • then — La expresión que se devuelve si cond es verdadera. - else — La expresión que se devuelve si cond es falsa o NULL.
Valor devuelto El resultado de las expresiones then o else, según la condición cond. Ejemplos Ejemplo de uso
Query
Response

least

Introducido en: v1.1.0 Devuelve el valor más pequeño entre los argumentos. Los argumentos NULL se ignoran.
  • Para arrays, devuelve el array menor en orden lexicográfico.
  • Para los tipos DateTime, el tipo de resultado se promueve al tipo más grande (p. ej., DateTime64 si se mezcla con DateTime32).
Use la configuración least_greatest_legacy_null_behavior para cambiar el comportamiento de NULLLa versión 24.12 introdujo un cambio no retrocompatible por el que los valores NULL se ignoran, mientras que antes devolvía NULL si uno de los argumentos era NULL. Para conservar el comportamiento anterior, establezca la configuración least_greatest_legacy_null_behavior (valor predeterminado: false) en true.
Sintaxis
Argumentos
  • x1[, x2, ...] — Un único valor o varios valores para comparar. Todos los argumentos deben ser de tipos comparables. Any
Valor devuelto Devuelve el menor valor de entre los argumentos, convertido al tipo compatible de mayor tamaño. Any Ejemplos Tipos numéricos
Query
Response
Arrays
Query
Response
Tipos de DateTime
Query
Response

multiIf

Introducido en: v1.1.0 Permite escribir el operador CASE de forma más compacta en la consulta. Evalúa cada condición en orden. Para la primera condición que sea verdadera (distinta de cero y no NULL), devuelve el valor de la rama correspondiente. Si ninguna de las condiciones es verdadera, devuelve el valor de else. El ajuste short_circuit_function_evaluation controla si se utiliza la evaluación de cortocircuito. Si está habilitada, la expresión then_i se evalúa solo en las filas donde ((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) es verdadera. Por ejemplo, con la evaluación de cortocircuito, no se lanza ninguna excepción por división entre cero al ejecutar la siguiente consulta:
Todas las expresiones de las ramas y de else deben tener un supertipo común. Las condiciones NULL se tratan como falsas. Sintaxis
Alias: caseWithoutExpression, caseWithoutExpr Argumentos
  • cond_N — La enésima condición evaluada que determina si se devuelve then_N. UInt8 o Nullable(UInt8) o NULL
  • then_N — El resultado de la función cuando cond_N es verdadero. - else — El resultado de la función si ninguna condición es verdadera.
Valor devuelto Devuelve el resultado de then_N para el cond_N que se cumpla; en caso contrario, devuelve el valor de else. Ejemplos Ejemplo de uso
Query
Response
Última modificación el 19 de junio de 2026