MySQL. Использование IF и CASE в SELECT.


Есть ситуации, когда в зависимости от определенных условий в блоке 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.

Вот и все. Если остались вопросы — пишите в комментариях. Удачи!

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *