Mysql多列加自定义排序

Mysql多列加自定义排序(order by+field())

  • 排序要求

    需要排序的字段有:部门(department),小组(team),职级(professionalClass)。

    排序:

    1.第一部分为职级值等于‘管理’的数据,排在最前面。
    2.第二部分为,职级除了‘管理’之外剩下的数据。将这些数据先按部门排序,同一个部门的放在一起;
    再按小组排序,把同部门同小组的放在一起;然后再按职级排序,职级高的放在前面低的放在后面。
    
  • 方案一

    由于职级的值是没有顺序规则的,所以要在sql查询的时候自定义顺序再排序。

    SELECT
        userName,department,
        team,professionalClass,
        assesser,finalLevel,
     case professionalClass when '管理'  THEN 1 else 2 end as orderClass, 
     case professionalClass 
        when '初级工程师C' then 1 
        when '初级工程师B' then 2 
        when '初级工程师A' then 3 
        when '中级工程师' then 4 
        when '中高级工程师' then 5 
        when '高级工程师' then 6 
     else 0 end as orderLevel 
    FROM ws_performanceassess_maintest
    ORDER BY orderClass,department,team,orderLevel desc
    

    按理说这个代码是没有问题的(其实也真的没问题),我在本地也测了好好的,可是邪门的是一模一样的代码放到服务器上去,查出的就是乱序的。搞得我跟人家说的好好的,后来就直播打脸了。

    到现在也不知道是为什么,在网上查了好多,表的编码格式应该没有错。还有的说是因为有中文,可是我这个职级字段的值就是有中文的。没办法就只能换另一种sql方案了。

  • 方案二

    同样的要自定义职级的排序,但这次不是在查询的时候而是在排序中直接用field()函数自定义顺序。

    SELECT
        userName,department,
        team,professionalClass,
        assesser,finalLevel
    FROM ws_performanceassess_maintest
    ORDER BY if(professionalClass='管理',0,1),
    FIELD(department,'智能软件业务部','DVB产品业务部','研发设计部','综合测试部','预研产品业务部','IT部','自动化业务部'),
    team,
    FIELD(a.professionalClass,'高级工程师','中高级工程师','中级工程师','初级工程师A','初级工程师B','初级工程师C')
    

    这次就没问题了,本地和服务器都显示出来了。这种方式特别方便,还可以自己决定部门排序的先后顺序。

    欧了,就这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值