Есть ситуации, когда в зависимости от определенных условий в блоке SELECT в запросе нужно возвращать определенные поля или же под один алиас возвращать разные значения. Как это сделать и в каких ситуациях это решает проблему я покажу в этой статье.
Ситуация из реальной практики — в БД хранится цена и рядом с ней хранится валюта этой цены. Т.е. у одной записи может быть цена 5 000 и валюта UAH, а во второй — 500, но с валютой USD. Соответственно чтобы сделать, например, сортировку, следует как-то унифицировать цену.
Для этого нужно привести обе цены к одной — например, к USD. Т.е. задача такая — если поле имеет валюту UAH — селектим просто цену, а в случае, если валюта — USD — цену домножаем на курс.
Вариант решения при помощи CASE:
SELECT
case
price_currency
when "UAH" then price
when "USD" then ( 25 * price)
end
as one_price
. . . . . . .
Вариант решения при помощи IF:
SELECT
IF(price_currency = 'UAH', price, 25 * price) as one_price
. . . . . . .
Оба варианта вернут для каждой записи значение, соотв. цене в UAH.
По моей практике — IF больше годится для случая, когда условие простое — т.е. вариантов, например два — две валюты. Если же валют будет больше — условие будет слишком громоздким и сложным к понимаю, за счет добавления вложенных блоков.
В таком случае лучше использовать CASE.
Вот и все. Если остались вопросы — пишите в комментариях. Удачи!