MySQL 百分比排序
需求:统计比率然后进行排序
SQL:
-- 计算结果保留两位小数 再拼接'%'
CONCAT_WS('',TRUNCATE( 计算结果, 2), '%') resultRatio,
现象:
# | 比率 |
001 | 6.25% |
002 | 16.66% |
003 | 10.09% |
004 | 0.00% |
原因:
MySQL 将该列当成字符串来处理,对比的不再是数值
001的比率第一位是6 > 002的第一位数:1 > 004 的第一位数:0
解决思路:
-- 将原来的统计列在加一行统计,不带'%'
-- 原本
CONCAT_WS('',TRUNCATE( 计算结果, 2), '%') resultRatio,
-- 新增
TRUNCATE( 计算结果, 2) resultRatioSort,
-- 多字段排序时
<if test="orderField != null and orderField != '' and orderType != null and orderType != ''">
<choose>
<when test="orderField == 'overTimeRatio'">
-- 如果是页面展示的那一列,则指定为不带%排序
ORDER BY resultRatioSort${orderType}
</when>
<otherwise>
-- 如果不是百分比那一列,则使用传参列
ORDER BY ${orderField} ${orderType}
</otherwise>
</choose>
</if>