正确排序CONCAT值MYSQL

时间:2014-07-01 17:32:39

标签: mysql sorting concatenation

执行简单的col1 / col2计算,然后使用CONCAT添加文字%符号后,我无法按顺序对它们进行成功排序。

最初我的结果排序DESC就像

9%
8%
75%
65%
100%

更新后:

   CASE WHEN ROUND(col1/col2 *100) = 100 
        THEN CONCAT(100, '%') 
        ELSE LPAD(CONCAT(ROUND(col1/col2 *100),'%'),3,'0') 
        END AS Percent

我能够通过在单个数字前面添加0来成功地对单个和双位数列进行排序,但是我留下了100个不合适的位置

75%
65%
09%
08%
100%

思想?

2 个答案:

答案 0 :(得分:2)

似乎您已经在值中添加了%符号,因此您可以在没有%符号的情况下检索这些符号,然后对其进行排序并添加回%符号。下面是工作和测试的SQL示例。

select concat(percentage, '%') -- add '%' sign
from (
select SUBSTRING_INDEX(percentage, '%', 1) percentage  -- remove `%`
from percentage_sorting) t
order by percentage;  -- order by values

答案 1 :(得分:0)

将百分比转换为字符串后,您基本上会按字母顺序排列,这通常不是您想要的数字:

20%
2%
12%
1%

如果要进行数字排序,则必须对实际数字进行排序:

SELECT CONCAT(percentage, '%')
FROM data
ORDER BY percentage DESC