Sql 按降序排列时,读数增加/减少的百分比为9%和90%

Sql 按降序排列时,读数增加/减少的百分比为9%和90%,sql,Sql,我创建了一个名为“百分比”的新列,用于计算预期付款和实际付款之间的百分比增长。这个计算似乎是正确的,但当我按降序排列时,9%正好低于90%,而9%应该在列表的底部 除此之外,我想删除每个数字末尾的附加.00 当前代码: SELECT [ExpectedPayment] ,[TotalActualPayment] ,CONCAT(ROUND(((TotalActualPayment-ExpectedPayment)/(ExpectedPayment)*100), 0),

我创建了一个名为“百分比”的新列,用于计算预期付款和实际付款之间的百分比增长。这个计算似乎是正确的,但当我按降序排列时,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%
您是按字符串而不是数字排序的

我建议仅按基本计算进行订购:

order by (TotalActualPayment-ExpectedPayment)/(ExpectedPayment) desc

我建议按照戈登的建议订购。通过将.000转换为type
int

SELECT [ExpectedPayment]
   ,[TotalActualPayment]
   ,CONCAT(cast(ROUND(((TotalActualPayment-ExpectedPayment)/(ExpectedPayment)*100), 0) as int), '%')  'Percentage' 
FROM DATABASE 
order by (TotalActualPayment-ExpectedPayment)/(ExpectedPayment) desc

如果您同意截断表达式的结果,则可以完全删除round语句。

您的代码不会在MySQL中运行,因此MySQL标记令人困惑。请注意,已删除标记。那么您使用的是哪种dbms?谢谢!!这似乎奏效了。如何通过删除每个数字末尾的额外.000来改进它?@Meowzz。对于正在使用的任何数据库,都可以使用适当的格式化方法格式化该值。