#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть следующий запрос в SQL Server,
SELECT
SUM(issue_count) AS incent_issued,
SUM(redeem_count) AS incent_redeemed,
CAST(SUM(redeem_count) / NULLIF(SUM(issue_count), 0) AS decimal(18, 2)) AS incent_redemption_rate
FROM
incent_summary
Я получаю следующий вывод:
incent_issued incent_redeemed incent_redemption_rate
-------------------------------------------------------
53742 7205 0.00
Почему я получаю incent_redemption_rate
значение 0.00? Я ожидаю, что оно будет равно 0.13.
Ответ №1:
SQL Server выполняет целочисленное деление, поэтому 1/2
является 0
, а не 0.5
. Я считаю, что самым простым решением является умножение на 1.0
:
SUM(redeem_count) * 1.0/NULLIF(SUM(issue_count), 0)
Обратите внимание, что вы преобразуете в десятичную дробь после деления, так что преобразование не влияет на целочисленное деление.