Процентное увеличение/уменьшение, показывающее 9% как 90%, если расположить его в порядке убывания

#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.