Выражение CASE (условное значение)
Oracle
-- Searched CASE
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- Oracle-specific shortcut: DECODE (equality comparison)
SELECT name, DECODE(status, 'A', 'Active', 'P', 'Passive', 'Unknown') FROM employee;CASE сопоставляет выражению разные значения в зависимости от условий; есть простая форма (CASE my_column WHEN value) и поисковая (CASE WHEN condition). DECODE в Oracle выполняет похожую задачу, но сравнивает только на равенство и считает NULL равными; для переносимости предпочтителен CASE.
PostgreSQL
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;PostgreSQL полностью поддерживает стандартное выражение CASE, которое можно использовать везде, где вычисляется значение (SELECT, WHERE, ORDER BY, GROUP BY). DECODE в стиле Oracle нет; используйте CASE или COALESCE/NULLIF для коротких условий.
MySQL
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- IF() for a short condition:
SELECT name, IF(active = 1, 'Yes', 'No') FROM employee;MySQL/MariaDB поддерживают стандартное выражение CASE; есть также функция IF(condition, if_true, if_false) для быстрого условия с двумя ветвями (похоже на IIF в SQL Server). CASE можно использовать в любом контексте выражений.
SQL Server
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- Shortcut: IIF() (2012+)
SELECT name, IIF(active = 1, 'Yes', 'No') FROM employee;SQL Server поддерживает стандартный CASE; с 2012 есть сокращение IIF() для условий с двумя ветвями и CHOOSE() для множественного выбора. IIF фактически транслируется в CASE. CASE можно использовать также в ORDER BY и вычисляемых столбцах.
MongoDB
// Closest equivalent: $switch or $cond
db.employee.aggregate([
{ $project: { name: 1, tier: {
$switch: { branches: [
{ case: { $gte: ["$salary", 20000] }, then: "high" },
{ case: { $gte: ["$salary", 10000] }, then: "medium" } ],
default: "low" } } } }
])В агрегации MongoDB эквиваленты CASE — операторы $switch (многоветвевой) и $cond (if-then-else с тремя аргументами). Они используются внутри $project или $addFields для создания условных производных полей.
Redis
# Not applicable: Redis has no in-query conditional expression.В Redis нет выражения запросов вроде CASE. Условная логика пишется в коде приложения или в серверном Lua-скрипте (EVAL). Ограниченное вычисление выражений возможно через APPLY внутри FT.AGGREGATE в RediSearch.
Elasticsearch
# Closest equivalent: a condition inside a runtime field or script
GET employee/_search
{
"runtime_mappings": { "tier": { "type": "keyword",
"script": "if (doc['salary'].value >= 20000) emit('high'); else if (doc['salary'].value >= 10000) emit('medium'); else emit('low');" } },
"fields": ["tier"]
}В Elasticsearch логика CASE внутри запроса пишется скриптом Painless (runtime field, script_fields или scripted metric). Поток if/else задаётся на языке Painless. Агрегация 'range' тоже может формировать CASE-подобные бакеты для категоризации.