zoukankan      html  css  js  c++  java
  • mysql 分组按条件统计

    百度经验

    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

  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/lijiageng/p/6183500.html
Copyright © 2011-2022 走看看