拒绝好几个 2020-07-09 20:51 采纳率: 0%
浏览 805

mysql 让一个字段先正数升序,再负数降序,动态给排序号

# mysql如何实现,让一个字段先正数升序,再负数降序。

目前已经实现了Oracle下的SQL语句,但是mysql不支持rank()函数,请教mysql下如何处理:

orcale实现的sql如下,如何改成mysql的

     select RANK() OVER(PARTITION BY period_value ORDER BY sign(target_bnlj_val) desc, abs(target_bnlj_val)) 序号,
       z.period_value 期间,
       o.org_sort 单位编号,
       ta.seq 类型编号,
       b.target_bnlj_val 数值
          from T_ZB_VAL b
          left join t_zb_period z
            on z.id = b.period_id
          left join T_ZB_org o
            on o.id = b.org_id
          left join t_zb_target ta
            on ta.id = b.target_id
         where target_id = '1fb6b27f5c4f4463aa6abafa5f6eff69'
           and o.org_type = '11'o.org_type = '11'

下图为执行后的数据:

图片说明

由于没有C币了,大神解决了,加微信红包感谢。

  • 写回答

2条回答 默认 最新

  • 封印di恶魔 2020-07-10 15:50
    关注

    实现一样的,mysql也有这两个函数
    第一个函数是判断数字的正负号,正数为1负数为-1 desc 逆序
    第二个函数是取绝对值 没指定排序方式默认从小到大

    order by sign(target_bnlj_val) desc, abs(target_bnlj_val)
    

    只不过sql的order by是写在后面的

    select * from table where a=b order by a 
    
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码