Я пытаюсь получить% скидки между двумя столбцами, первая проблема, которую я решил, - это то, что другой столбец может быть 0 или null, Теперь, когда я его вычисляю, он всегда дают мне 100 или 0 в результате колонке «скидка»Почему postgres вычисляет процент неправильно (на основе результата столбцов)
Product.active.select("*, 100-(price/(
(CASE WHEN(market_price IS NULL OR market_price = 0)
THEN price ELSE market_price END)))*100
AS discount")
Все результаты были 0 или 100: \
Пытался решить с суб функции, но все-таки дал мне тот же неверный процент.
Не было бы лучше, чтобы исправить плохую схему базы данных с миграцией, а не добавлять этот Hacky обходной путь для конкретного запроса? –
Аналогично, я бы посоветовал исправить изворотливые значения базы данных '0' и' NULL' для 'market_price', вместо того, чтобы требовать такого обхода в вашем запросе. –
@TomLord благодарит за подсказку! –