当前位置:网站首页>Mysql 生成排序序号
Mysql 生成排序序号
2022-08-03 14:07:00 【InfoQ】
业务场景
Mysql查询数据后,同时需要根据其中某一个字段值进行排名处理,简单sql如图
SELECT id,user_id,sales_performance,(@i:[email protected]+1) rank from crm_account_user_performance_data,(SELECT @i:=0) t WHERE dept_id=307 ORDER BY sales_performance DESC;
查询结果如图
其中: (@i:[email protected]+1)代表定义一个变量,每次增加1,整体业务就是查询表数据同时根据sales_performance倒序后赋予排名。
Java业务代码
先根据整表查询去重的dept_id,再在各dept_id下查询数据的sales_performance倒序获得排名信息,后批量更新到数据库rank排名字段保存数据
List<Long> deptlist = accountUserPerformanceDataMapper.selectDeptIdsByAccountTime(date);
if (CollectionUtils.isNotEmpty(deptlist)) {
//遍历为每个部门下人员进行业绩排序
for (Long deptId : deptlist) {
List<AccountUserPerformanceData> list = accountUserPerformanceDataMapper.selectRankByDeptId(deptId);
//批量更新本部门排序
accountUserPerformanceDataMapper.updateRankBatch(list);
}
}
xml代码,获取dept_id集合
<select id="selectDeptIdsByAccountTime" parameterType="Date" resultType="java.lang.Long">
SELECT DISTINCT dept_id FROM crm_account_user_performance_data
WHERE account_time = #{accountTime}
</select>
获取各dept_id内部根据sales_performance倒序排列的序号值
<select id="selectRankByDeptId" parameterType="Long" resultMap="AccountUserPerformanceDataResult">
SELECT id,user_id,(@i:[email protected]+1) rank from crm_account_user_performance_data,(SELECT @i:=0) t
WHERE dept_id=#{deptId} ORDER BY sales_performance DESC
</select>
批量更新到数据表中
<update id="updateRankBatch" parameterType="List">
update crm_account_user_performance_data
set rank = case id
<foreach collection="list" item="account" separator=" ">
when #{account.id} then #{account.rank}
</foreach>
end where id in
<foreach collection="list" item="account" open="(" separator="," close=")">
#{account.id}
</foreach>
</update>
注:本文设计Mysql获取数据排序序号及批量更新数据库相关操作,日常工作记录,需要的博友自行参考哈。
边栏推荐
猜你喜欢
随机推荐
LARS (Least Angle Regression)
Huffman树
js \n\r 换行失败 :【white-space: pre-line;】${} Template Literals
0代码4步体验物联网设备上云
js单线程及事件循环、宏任务和微任务
位级运算之提取位级表示的最高位
连亏四个月,赚不回电费,预制菜经销商恐成“韭菜”?
【MATLAB项目实战】基于CNN_SVM的图像花卉识别
ITSM软件与工单系统的区别是什么?
冰蝎加密 WebShell 过杀软
背后的力量 | 提升医疗服务“速度“和“温度” 华云数据助力上海国际医学中心加速智慧医院建设
PostgreSQL V14中更好的SQL函数
Nanoprobes金脂质偶联物的相关应用
15年软件架构师经验总结:在ML领域,初学者踩过的5个坑
北斗三号系统建成开通两周年:基础设施端核心技术已实现自主可控
MySQL数据表操作实战
网络通信的过程
atrace和systrace的基本使用方法
关于 vditor 可否同步飞书文档问题
Nanoprobes EnzMet - 酶金相相关介绍及应用