SQL查询中ORDER BY DESC对[%]列排序未正常生效是什么原因?
问题根因
你排序时使用的[%]是FORMAT函数输出的字符串类型别名,不是原始的浮点数值列。字符串按字符编码逐位比较,会出现9%排序优先级高于10%的不符合数值逻辑的结果,因此降序排序不符合预期。
修正方案
只需要将ORDER BY的排序依据替换为原始浮点列即可,修正后代码如下:
SELECT YEAR, Strata, Strata_Name, FORMAT([%]/10000, 'P') [%] FROM [dbo].[Depression_in_California] WHERE Strata_Name = 'Male' -- 直接按原始浮点列排序,避免使用格式化后的字符串别名 ORDER BY [dbo].[Depression_in_California].[%] DESC;
也可以直接按计算后的数值排序,写法更直观:
SELECT YEAR, Strata, Strata_Name, FORMAT([%]/10000, 'P') [%] FROM [dbo].[Depression_in_California] WHERE Strata_Name = 'Male' ORDER BY [%]/10000 DESC;
注意:如果要避免别名和原列重名导致的逻辑混淆,建议给格式化后的百分比列设置不同的别名,比如
formatted_percent。
内容的提问来源于stack exchange,提问作者Freddmo
相关产品推荐
相关产品推荐

