Mysql实现oracledecode()函数
原⽂地址为:
今天业务上有个需求,按组group_by获取数据,但过滤掉组中某字段包含某值的那些组(如status=1)
perl哈希数组数据描述需求
字段    id  name      status
    1    aaa    0网页上传文件上传不了
    2    aaa    0
    3    bbb    0
    4    bbb    1
pycharm有没有手机版    5    bbb    3
    6    ccc    0
    7    ccc    3
按组分,可得aaa,bbb,ccc这三组数据,但由于bbb组中有包含status=1的数据,需求不能获取bbb组,要求⼀条sql查出status不包含=1的组name:aaa,ccc
⼤概查了下,中有强⼤的de()这种需求,这⾥就肤浅说下⾃⼰的理解,decode(p1,p2,p3,p4)函数有四个或更多个参数(详见⽂档),这四个参数可以为表达式或字段,
  意思是:p1的结果1,与p2的结果2⽐较,if(结果1=结果2),则decode()函数返回p3,else函数返回p4
oracle简单例⼦:
  select decode(字段status,1,99,0) from dual;--当字段status的值为1时,decode结果为99,否则为0
按开头说的需求,我们可以在需要过滤的字段上加上decode函数,然后将所有值过滤为0/⾮0,再group by下,having sum()这个decode结果判断和是否为0或⾮0,是⾮0说明包含,是0说明不包含
但是mysql没有decode()函数,但是的但是,却可以⽤if()函数来替代,效果更好更直观:
asp搭建源码
  if(p1>p2,p3,p4),意思就是当p1⼤于p2,if函数返回p3,否则返回p4
bigdecimal和double转化
变通下,开头需求可以实现:mysql语句转oracle
  select name from t_table group by name having sum(if(status=1),1,0)=0;
结果集为:aaa,ccc
转载请注明本⽂地址:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。