mysql CASE WHEN的用法

case when 自定义排序时的使用
根据 case when 新的 sort字段排序

case 
    when t2.status = 4
    and t2.expire_time>UNIX_TIMESTAMP()
    and t2.expire_time<UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 60 day)) then 4
        when `status` = 2  then 3
        when `status` = 3 then 2
        when t2.status = 4
        and t2.expire_time>UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 60 day))
        and t2.expire_time<UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 1 year)) then 1
    else 0
    end sort     
    
     $query->orderBy('sort desc ,t2.expire_time desc,t2.created_at desc');
  • 当colume 与condition 条件相等时结果为result

    case colume 
    when condition then result
    when condition then result
    when condition then result
    else result
    end
  • 当满足某一条件时,执行某一result
    ```

case
when condition then result
when condition then result
when condition then result
else result
end
![image](//note.youdao.com/yws/res/40025/WEBRESOURCE6489287fb0198b71decf1df9891ccac4)


- 当满足某一条件时,执行某一result,把该结果赋值到new_column_name 字段中
case
when condition then result
when condition then result
when condition then result
else result
end new_column_name
```


case when 用在select 语句中,新的字段new_column_name可以用来排序,但是不能用在where中

end 后面加as new_colume_name

===================================================================

实验

建表1

CREATE TABLE `t_tab_templete_group_templete_ref` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `belong_tab_templete_id` bigint(20) DEFAULT NULL COMMENT '所属t模板Id',
  `group_id` bigint(20) DEFAULT NULL COMMENT '所属group模板Id',
  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='tab模板和group及datagroup模板关联表'

建表2

CREATE TABLE `t_data_group_templete` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `data_group_name` varchar(255) DEFAULT NULL COMMENT 'Data Group名称',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='DataGroup模板表'

建表3

CREATE TABLE `t_group_templete` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',

  `templete_name` varchar(128) DEFAULT NULL COMMENT '模板名称',

 `group_type` tinyint(4) DEFAULT NULL COMMENT 'group模板类型1group2datagroup3spegroup',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `merchants_id` bigint(20) DEFAULT NULL COMMENT '商户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='group模板表'

建表4

CREATE TABLE `t_spe_group` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `spe_group_name` varchar(64) DEFAULT NULL COMMENT '模板名称',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `status` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

下面是sql查询实例

SELECT 

CASE R.group_type 
WHEN 1 THEN  G.templete_name
WHEN 2 THEN  D.data_group_name
WHEN 3 THEN  S.spe_group_name
END
AS group_name,R.id,R.group_type
FROM t_tab_templete_group_templete_ref R
LEFT JOIN t_group_templete G ON R.group_type =1 && R.group_id = G.id
LEFT JOIN t_data_group_templete D ON R.group_type =2 && R.group_id = D.id

LEFT JOIN t_spe_group S ON R.group_type =3 && R.group_id = S.id

若有问题欢迎大家与我互动交流,可评论,可留言,希望我们大家能一起学习,共同进步。

猜你喜欢

转载自blog.csdn.net/myuhua/article/details/80596547