TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #70 2.31K
🔤🔤🔤🔤 Вот про такой кейс сейчас расскажу. В прямом смысле про условную конструкцию case.
Она довольно часто используется в SQL запросах.
В when мы задаем условие и то, что нам нужно получить при его выполнении, а в else – выполнить то, что условию не соответствует. В конце после end as прописываем как называться будет столбик.

Сначала покажу на примерах из курса Карпова.
🔹Нужно повысить цену на 5% только на те товары, цена которых превышает 100 рублей. Цену остальных товаров оставить без изменений. Также не повышайте цену на икру, которая и так стоит 800 рублей. Выведите id и наименования всех товаров, их старую и новую цену. Результат отсортируйте сначала по убыванию новой цены, затем по возрастанию id товара.

SELECT
product_id,
name,
price as old_price,
case
when price > 100
and name != 'икра' then price * 1.05
else price
end as new_price
FROM
products
ORDER BY 4 desc, product_id

🔹В следующем задании необходимо посчитать стоимость заказа, в котором будут три пачки сухариков, две пачки чипсов и один энергетический напиток. Колонку с рассчитанной стоимостью заказа нужно назвать order_price.
Тут мы будем суммировать цены с помощью sum, в который поместим то, что нам выдаст case
SELECT
sum(
case
when name = 'сухарики' then price * 3
when name = 'чипсы' then price * 2
when name = 'энергетический напиток' then price
else 0
end
) as order_price
FROM
products

🔹 А теперь покажу на рабочем примере:
Вот так рассчитывается общая рублевая сумма при условии, что есть цены не только в рублях, но и в других валютах. Если валюта рублевая (in ('RUB','RUR')), то цена просто amount, в противном случае (else) цена умножается на курс (amount*rate)

sum(
case
when currency in ('RUB', 'RUR') then amount
else amount * rate
end
) as amount

🔹Или допустим, вот такой еще пример. Если в базе есть данные по фио или о продукте, но где-то они пропущены, то можно сделать столбец с текстом 'есть данные' или 'не указано'. Вместо текста можно 1 и 0 поставить.

case
when name != '' then 'есть данные'
when name = '' then 'не указано'
when name is null then 'не указано'
end
as 'инфа'

Ну и конечно в одном запросе может быть несколько case как обычно в select через запятую.
Если понравился такой формат разбора Карпов+рабочий опыт, ставьте 🐳
  • 🐳 36
  • 👍 11
  • ❤ 3
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →