mysql CASE WHEN的用法
阿新 • • 發佈:2019-01-22
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
若有問題歡迎大家與我互動交流,可評論,可留言,以後每週我會堅持至少更新一篇部落格文章,喜歡的朋友可以加一下關注。