elasticsearch/docs/reference/query-languages/esql/_snippets/functions/case.md
Colleen McGinnis b7e3a1e14b
[docs] Migrate docs from AsciiDoc to Markdown (#123507)
* delete asciidoc files

* add migrated files

* fix errors

* Disable docs tests

* Clarify release notes page titles

* Revert "Clarify release notes page titles"

This reverts commit 8be688648d.

* Comment out edternal URI images

* Clean up query languages landing pages, link to conceptual docs

* Add .md to url

* Fixes inference processor nesting.

---------

Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
Co-authored-by: Liam Thompson <leemthompo@gmail.com>
Co-authored-by: Martijn Laarman <Mpdreamz@gmail.com>
Co-authored-by: István Zoltán Szabó <szabosteve@gmail.com>
2025-02-27 17:56:14 +01:00

3.2 KiB
Raw Blame History

CASE [esql-case]

Syntax

:::{image} ../../../../../images/case.svg :alt: Embedded :class: text-center :::

Parameters

condition
A condition.
trueValue
The value thats returned when the corresponding condition is the first to evaluate to true. The default value is returned when no condition matches.
elseValue
The value thats returned when no condition evaluates to true.

Description

Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to true. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches. If the number of arguments is even, and no condition matches, the function returns null.

Supported types

condition trueValue elseValue result
boolean boolean boolean boolean
boolean boolean boolean
boolean cartesian_point cartesian_point cartesian_point
boolean cartesian_point cartesian_point
boolean cartesian_shape cartesian_shape cartesian_shape
boolean cartesian_shape cartesian_shape
boolean date date date
boolean date date
boolean date_nanos date_nanos date_nanos
boolean date_nanos date_nanos
boolean double double double
boolean double double
boolean geo_point geo_point geo_point
boolean geo_point geo_point
boolean geo_shape geo_shape geo_shape
boolean geo_shape geo_shape
boolean integer integer integer
boolean integer integer
boolean ip ip ip
boolean ip ip
boolean keyword keyword keyword
boolean keyword text keyword
boolean keyword keyword
boolean long long long
boolean long long
boolean text keyword keyword
boolean text text keyword
boolean text keyword
boolean unsigned_long unsigned_long unsigned_long
boolean unsigned_long unsigned_long
boolean version version version
boolean version version

Examples

Determine whether employees are monolingual, bilingual, or polyglot:

FROM employees
| EVAL type = CASE(
    languages <= 1, "monolingual",
    languages <= 2, "bilingual",
     "polyglot")
| KEEP emp_no, languages, type
emp_no:integer languages:integer type:keyword
10001 2 bilingual
10002 5 polyglot
10003 4 polyglot
10004 5 polyglot
10005 1 monolingual

Calculate the total connection success rate based on log messages:

FROM sample_data
| EVAL successful = CASE(
    STARTS_WITH(message, "Connected to"), 1,
    message == "Connection error", 0
  )
| STATS success_rate = AVG(successful)
success_rate:double
0.5

Calculate an hourly error rate as a percentage of the total number of log messages:

FROM sample_data
| EVAL error = CASE(message LIKE "*error*", 1, 0)
| EVAL hour = DATE_TRUNC(1 hour, @timestamp)
| STATS error_rate = AVG(error) by hour
| SORT hour
error_rate:double hour:date
0.0 2023-10-23T12:00:00.000Z
0.6 2023-10-23T13:00:00.000Z