1. 程式人生 > >mysql CASE WHEN的用法

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

若有問題歡迎大家與我互動交流,可評論,可留言,以後每週我會堅持至少更新一篇部落格文章,喜歡的朋友可以加一下關注。