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

  • 相关阅读:
    关于通胀,交易手续费和加密货币的货币政策
    私有链和联盟链的机会与挑战
    耶鲁大学公开课:博弈论第九节(笔记)
    区块链匿名技术
    区块链对比数据库
    硬盘 分区 格式化 和挂载
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
  • 原文地址:https://www.cnblogs.com/lijiageng/p/6183500.html
Copyright © 2011-2022 走看看