#sql
Вопрос:
Я создал новый столбец под названием «Процент», который вычисляет процентное увеличение между ожидаемым и фактическим платежом. Расчет кажется правильным, но когда я ставлю его в порядке убывания, 9% находится прямо под 90%, когда 9% должны быть в нижней части списка.
В дополнение к этому я хотел бы удалить дополнительные .00 в конце каждого номера.
Текущий код:
SELECT [ExpectedPayment]
,[TotalActualPayment]
,CONCAT(ROUND(((TotalActualPayment-ExpectedPayment)/(ExpectedPayment)*100), 0), '%') 'Percentage'
FROM DATABASE
ORDER BY PERCENTAGE DESC;
Выходной ток:
Ожидаемый платеж | Общий фактический платеж | Процент |
---|---|---|
23924.8962 | 46096.44 | 93.00% |
24083.0961 | 46355.47 | 92.00% |
18937.6445 | 36100.58 | 91.00% |
18377.3185 | 20123.11 | 9.00% |
17537.915 | 19174.82 | 9.00% |
24083.0961 | 45515.82 | 89.00% |
26064.4709 | 49300.18 | 89.00% |
Ожидаемый результат:
Ожидаемый платеж | Общий фактический платеж | Процент |
---|---|---|
23924.8962 | 46096.44 | 93% |
24083.0961 | 46355.47 | 92% |
18937.6445 | 36100.58 | 91% |
24083.0961 | 45515.82 | 89% |
26064.4709 | 49300.18 | 89% |
18377.3185 | 20123.11 | 9% |
17537.915 | 19174.82 | 9% |
Комментарии:
1. Ваш код не будет выполняться в MySQL, поэтому тег MySQL сбивает с толку.
2. Отметил, удалил метку.
3. Итак, какую СУБД вы используете?
Ответ №1:
Вы делаете заказ по строке, а не по номеру.
Я бы предложил просто заказать по базовому расчету:
order by (TotalActualPayment-ExpectedPayment)/(ExpectedPayment) desc
Комментарии:
1. Спасибо!! Это, казалось, сделало свое дело. Как я мог бы улучшить его, удалив дополнительные .000 в конце каждого числа?
2. @Meowzz . . . Вы бы отформатировали значение, используя соответствующий метод форматирования для любой используемой вами базы данных.
Ответ №2:
Я предлагаю заказать по предложению Гордона. Вы можете удалить .000 в конце, приведя его как тип int
SELECT [ExpectedPayment]
,[TotalActualPayment]
,CONCAT(cast(ROUND(((TotalActualPayment-ExpectedPayment)/(ExpectedPayment)*100), 0) as int), '%') 'Percentage'
FROM DATABASE
order by (TotalActualPayment-ExpectedPayment)/(ExpectedPayment) desc
Если вы согласны с усечением результата выражения, вы можете вообще удалить оператор round.