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>