• Mysql之case语句(附带实例)


    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧。

    结构:case  when… then …end

    1.判断的同时改变其值

    eg:

                       

    select OperatorAccount,
    
            case
         when CreateTime>'2016-02-14 16:24:42' then 'after'
    
             when CreateTime<'2016-02-14 16:24:42' then 'before'
    
             else 'now' end stage
    from log_login order by CreateTime DESC

     

     

     

    第二种写法

                       

     SELECT CallerNumber, CASE IsLocal
             WHEN 0 THEN '外线'
    
              WHEN 1 THEN '内线' END
    
      FROM cdr

     

     


     

    2.拆分一行为多列

    eg:

     SELECT SipAccount, COUNT(1) AS number,IsCheck
      FROM cdr
      GROUP BY SipAccount,IsCheck

    
    

    针对这个统计结果进行拆分(0表示未打分,1代表优秀,2代表合格,3代表不合格)

    最终结果如下:

     

    所以最终要用到行拆分成三列,语句如下

                       
     SELECT SipAccount,
                  (CASE IsCheck WHEN 1 THEN number END) youxiu,
                  (CASE IsCheck WHEN 2 THEN number END) hege,
                  (CASE IsCheck WHEN 3 THEN number END) buhege
     FROM
              (SELECT SipAccount, COUNT(1) AS number,IsCheck
               FROM cdr
               GROUP BY SipAccount,IsCheck) AS a
    
    
    
    
    

    
    

    现在结果是这样的,你会发现虽然拆成了三列,但是最终结果还不是自己需要的,接下来就需要根据sipaccount来分组的同时对结果进行处理了。语句如下:

                       
     SELECT sipaccount,
            IF(MAX(youxiu) IS NULL,0, MAX(youxiu)) youxiu,
            IF(MAX(hege) IS NULL,0, MAX(hege)) hege,
            IF(MAX(buhege) IS NULL,0, MAX(buhege)) buhege
    FROM
            (SELECT SipAccount,
            (CASE IsCheck WHEN 1 THEN number END) youxiu,
            (CASE IsCheck WHEN 2 THEN number END) hege,
            (CASE IsCheck WHEN 3 THEN number END) buhege
            FROM
         (SELECT SipAccount, COUNT(1) AS number,IsCheck  FROM cdr  GROUP BY SipAccount,IsCheck) AS a) AS b
                        GROUP BY sipaccount
    
    
    
    
    

     最终得到了这个结果。正式我们需要的格式

     

  • 相关阅读:
    Python编程题49两两交换链表中的节点
    Python编程题51二分查找
    Python中的列表(List)
    Python编程题52在排序列表中查找元素的第一个和最后一个位置
    Python编程题50设计单链表
    Python中的集合(Set)
    Python中的元组(Tuple)
    Python编程题47回文链表
    Python编程题46合并两个有序链表
    Python编程题48删除链表的倒数第 N 个结点
  • 原文地址:https://www.cnblogs.com/dreamflycc/p/mysql_case.html
Copyright © 2020-2023  润新知