百度經驗
COUNT(CASE WHEN (S.rank = 1) THEN S.loanContractId END ) AS 'MZ', //根據loanContractId 分組,並統計rank=1出現的次數
CI 框架
/**
* 獲取三種消息類型各自的未讀數
* @param int $user_id 用戶的id
* */
public function get_unread_count($user_id) {
$this->db->select('COUNT( CASE WHEN push_type=1 THEN 1 ELSE NULL END ) AS `remind_count`,COUNT( CASE WHEN push_type=2 THEN 1 ELSE NULL END ) AS `appoint_count`,COUNT( CASE WHEN push_type=3 THEN 1 ELSE NULL END ) AS `medical_count`');//查詢一個字段三種狀態的數量
$this->db->where('user_id', $user_id);//條件
$this->db->where('is_read', 0);//條件
$query = $this->db->get('common_push');//表名
$data = $query->row_object();
return $data;
}
===================================
語法1:
語法的形式:CASE expression
WHEN expression_11 THEN expression_12
…
WHEN expression_n1 THEN expression_n2
[ELSE expression_m]
END
該語句的執行過程是:將CASE后面表達式的值與各WHEN子句中的表達式的值進行比較,如果兩者相等,則返回THEN后的表達式的值,然后跳出CASE語句,否則返回ELSE子句中的表達式的值。ELSE子句是可選項。當CASE語句中不包含ELSE子句時,如果所有比較失敗時,CASE語句將返回NULL。
例子:
從數據表stud_info中,選取stud_id、gender,如果gender為“男”則輸出“M”,如果為“女”輸出“F”。
SELECT stud_id, sex=CASE gender
WHEN ’男’ THEN ’M’
WHEN ’女’ THEN ’F’
END
FROM stud_info
語法2:
語法形式:CASE WHEN condition_expression_1 THEN expression_1
…
WHEN condition_expression_n THEN expression_n
[ELSE expression_m]
END
首先測試WHEN后的條件表達式的值,如果其值為真,則返回THEN后面的表達式的值,否則測試下一個WHEN子句中的表達式的值,如果所有WHEN子句后的表達式的值都為假,則返回ELSE后的表達式的值,如果在CASE語句中沒有ELSE子句,則CASE表達式返回NULL。
例子:
從stud_grade表中查詢所有同學考試成績情況,凡成績為空者輸出“未考”、小於60分輸出“不及格”、60分至70分輸出“及格”、70分至90分輸出“良好”、大於或等於90分時輸出“優秀”。
SELECT stud_id,name,score=CASE WHEN grade IS NULL THEN ’未考’
WHEN grade<60 THEN ’不及格’
WHEN grade>=60 AND grade<70 THEN ’及格’
WHEN grade>=70 AND grade<90 THEN ’良好’
WHEN grade>=90 THEN ’優秀’
END
FROM stud_grade
