Условные выражения
Функция | Описание |
|---|---|
Проверяет список условий и возвращает одно из нескольких возможных результирующих выражений. | |
Возвращает первое значение, не равное NULL, среди переданных значений или столбцов. | |
Возвращает наибольшее значение в списке выражений. | |
Возвращает expr1, если логическое условие, заданное первым параметром, принимает значение true, и expr2 в противном случае. | |
Если значение выражения равно NULL, возвращает альтернативное значение. | |
Возвращает наименьшее значение в списке выражений. | |
Возвращает NULL, если два выражения равны, и первый аргумент в противном случае. |
CASE
Проверяет список условий и возвращает одно из нескольких возможных результирующих выражений.
Выражение CASE имеет две формы:
-
Поисковый CASE: проверяет каждое
WHENкак независимое условие. -
Простой CASE: сравнивает операнд с каждым значением
WHEN.
Предложение ELSE необязательно; если оно опущено, для несовпадающих строк возвращается NULL.
Пример:
Поисковый CASE (без операнда):
df = pl.DataFrame({"n": [10, 20, 30, 40, 50]})
df.sql("""
SELECT
n,
CASE
WHEN n <= 20 THEN 'small'
WHEN n <= 40 THEN 'medium'
ELSE 'large'
END AS size
FROM self
""")
# shape: (5, 2)
# ┌─────┬────────┐
# │ n ┆ size │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪════════╡
# │ 10 ┆ small │
# │ 20 ┆ small │
# │ 30 ┆ medium │
# │ 40 ┆ medium │
# │ 50 ┆ large │
# └─────┴────────┘
Простой CASE (с операндом):
df = pl.DataFrame({"lbl": ["a", "b", "c", "d"]})
df.sql("""
SELECT
lbl,
CASE lbl
WHEN 'a' THEN 'alpha'
WHEN 'b' THEN 'beta'
ELSE 'other'
END AS name
FROM self
""")
# shape: (4, 2)
# ┌─────┬───────┐
# │ lbl ┆ name │
# │ --- ┆ --- │
# │ str ┆ str │
# ╞═════╪═══════╡
# │ a ┆ alpha │
# │ b ┆ beta │
# │ c ┆ other │
# │ d ┆ other │
# └─────┴───────┘
COALESCE
Возвращает первое значение, не равное NULL, среди переданных значений или столбцов.
Пример:
df = pl.DataFrame(
{
"foo": [1, None, 3, None],
"bar": [1, 2, None, 4],
}
)
df.sql("""
SELECT foo, bar, COALESCE(foo, bar) AS baz FROM self
""")
# shape: (4, 3)
# ┌──────┬──────┬─────┐
# │ foo ┆ bar ┆ baz │
# │ --- ┆ --- ┆ --- │
# │ i64 ┆ i64 ┆ i64 │
# ╞══════╪══════╪═════╡
# │ 1 ┆ 1 ┆ 1 │
# │ null ┆ 2 ┆ 2 │
# │ 3 ┆ null ┆ 3 │
# │ null ┆ 4 ┆ 4 │
# └──────┴──────┴─────┘
GREATEST
Возвращает наибольшее значение в списке выражений.
Пример:
df = pl.DataFrame(
{
"foo": [100, 200, 300, 400],
"bar": [20, 10, 30, 40]
}
)
df.sql("""
SELECT GREATEST(foo, bar) AS baz FROM self
""")
# shape: (4, 1)
# ┌─────┐
# │ baz │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 100 │
# │ 200 │
# │ 300 │
# │ 400 │
# └─────┘
IF
Возвращает expr1, если логическое условие, заданное первым параметром, принимает значение true, и expr2 в противном случае.
Пример:
df = pl.DataFrame(
{
"foo": [100, 200, 300, 400],
"bar": [10, 20, 30, 40]
}
)
df.sql("""
SELECT IF(foo < 250, 111, 999) AS baz FROM self
""")
# shape: (4, 1)
# ┌─────┐
# │ baz │
# │ --- │
# │ i32 │
# ╞═════╡
# │ 111 │
# │ 111 │
# │ 999 │
# │ 999 │
# └─────┘
IFNULL
Если значение выражения равно NULL, возвращает альтернативное значение.
Пример:
df = pl.DataFrame(
{
"foo": ["a", None, None, "d"],
"bar": [1, 2, 3, 4],
}
)
df.sql("""
SELECT IFNULL(foo, 'n/a') AS baz FROM self
""")
# shape: (4, 1)
# ┌─────┐
# │ baz │
# │ --- │
# │ str │
# ╞═════╡
# │ a │
# │ n/a │
# │ n/a │
# │ d │
# └─────┘
LEAST
Возвращает наименьшее значение в списке выражений.
Пример:
df = pl.DataFrame(
{
"foo": [100, 200, 300, 400],
"bar": [20, 10, 30, 40]
}
)
df.sql("""
SELECT LEAST(foo, bar) AS baz FROM self
""")
# shape: (4, 1)
# ┌─────┐
# │ baz │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 20 │
# │ 10 │
# │ 30 │
# │ 40 │
# └─────┘
NULLIF
Возвращает NULL, если два выражения равны, и первый аргумент в противном случае.
Пример:
df = pl.DataFrame(
{
"foo": [100, 200, 300, 400],
"bar": [20, 10, 30, 40]
}
)
df.sql("""
SELECT NULLIF(foo, bar) AS baz FROM self
""")
# shape: (4, 1)
# ┌─────┐
# │ baz │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 100 │
# │ 200 │
# │ 300 │
# │ 400 │
# └─────┘
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/sql/functions/conditional.html