前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql 生成排序序号

Mysql 生成排序序号

作者头像
六月的雨在Tencent
发布2024-03-29 09:11:24
1050
发布2024-03-29 09:11:24
举报
文章被收录于专栏:CSDNCSDN
Mysql 生成排序序号

业务场景

Mysql查询数据后,同时需要根据其中某一个字段值进行排名处理,简单sql如图

代码语言:javascript
复制
SELECT id,user_id,sales_performance,(@i:=@i+1) rank from crm_account_user_performance_data,(SELECT @i:=0) t WHERE dept_id=307 ORDER BY sales_performance DESC;

结果如图

其中: (@i:=@i+1)代表定义一个变量,每次增加1,整体业务就是查询表数据同时根据sales_performance倒序后赋予排名。

java业务代码

先根据整表查询去重的dept_id,再在各dept_id下查询数据的sales_performance倒序获得排名信息,后批量更新到数据库rank排名字段保存数据```

代码语言:javascript
复制
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集合

代码语言:javascript
复制
<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倒序排列的序号值

代码语言:javascript
复制
<select id="selectRankByDeptId" parameterType="Long" resultMap="AccountUserPerformanceDataResult">
  SELECT id,user_id,(@i:=@i+1) rank from crm_account_user_performance_data,(SELECT @i:=0) t
  WHERE dept_id=#{deptId} ORDER BY sales_performance DESC
</select>

批量更新到数据表中

代码语言:javascript
复制
<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获取数据排序序号及批量更新数据库相关操作,日常工作记录,需要的博友自行参考哈。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mysql 生成排序序号
  • 业务场景
  • java业务代码
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档