zoukankan      html  css  js  c++  java
  • case when以及集合聚合函数的用法

    case when对应到python里面的If  else(此处横着看对比)

                mysql语法                                                   python

                case when 表达式                                      if   表达式

                Then 输出                                                  输出

                 when 表达式                                              elif  表达式

                 Then 输出                                                   输出

                  Else                                                            else

                         输出                                                    输出

                 End           

    例子(此处横着看对比)

                 mysql                                                        python

                Case when id = 1                                     if  id == 1:

                   Then 2                                                         2

                When id = 2                                              elif  id == 2:

                   Then 1                                                         1

                 else                                                         else:

                     10                                                             10

                 End       

    python的冒号在Mysql里面用Then代替                 

     Mysql里面的case when的例子2

                        id       Name      classid

                        1         A                1

                        2         B                1

                        3         C                2

                        4         D                3

                        5         E               2

                        6         F               3

    将1班的学生转到2班,将2班的学生转到1班,将3班的学生不变,想要输出的结果为

                        id       Name      classid

                         1         A                2

                         2         B                2

                         3         C                1

                         4         D                3

                         5         E                1

                         6         F                3  

    SQL语句

                    SELECT id,Name,                                                                                

                     (case when classid = 1 Then  2                                                                                                                                           

                      when  classid = 2 Then  1                                                                                                                                                                                   

                     else                                                                                                       

                             classid  End) AS a                                                                                 

                     FROM stu;

     这里case when作列名太长了,用一个别名a代替,case when是放到select语句里面的

    case when部分对应Python

                    if  classid == 1:

                         2

                   elif classid == 2:

                         1

                  else:

                        classid

    case when相当于python的if

    python的elif对应mysql里的when

                           聚集函数 + case when

                           表   分数scores

                           Name      stage                     score       

                           A           基础学科                 1            

                           B           基础学科                 2             

                           C           基础学科                 3            

                           A           爬虫                         1           

                           B           爬虫                         3          

                           C           爬虫                         2           

                           A           SQL                          2           

                           B           SQL                         2            

                           C           SQL                         4           

     需求通过一个SQL语句把上诉的表打印出一下的效果

                  SELECT name,
                  max(CASE WHEN stage='基础学科' THEN score ELSE NULL END) AS '基础学科',
                  max(CASE WHEN stage='爬虫' THEN score ELSE NULL END) AS '爬虫',
                  max(CASE WHEN stage='SQL' THEN score ELSE NULL END) AS 'SQL'
                  FROM scores GROUP BY name;

                          Name      基础学科       爬虫               SQL

                            A                  1                1                   2

                            B                  2                3                   2

                            C                  3                2                   4

    怎么把3列的表变成4列(解析)

                          Name      学科                     成绩         列1              列2             列3

                              A           基础学科                 1             1               null             null 

                              B           基础学科                 2              2              null             null 

                              C           基础学科                 3             3               null             null 

                              A           爬虫                         1            null              1               null 

                              B           爬虫                         3            null              3               null 

                              C           爬虫                         2            null              2               null 

                              A           SQL                          2           null             null             2

                              B           SQL                         2            null             null             2

                              C           SQL                         4            null             null             4

                             SELECT Name,max(列1) as 基础  FROM score GROUP BY Name;

                             SELECT Name,max(列2) as 爬虫  FROM score GROUP BY Name;

                             SELECT Name,max(列3) as SQL  FROM score GROUP BY Name;

                             输出

                             A   1

                             B   2

                             C   3

                             定义列1的思路

                             首先类比python语法if Name = "基础学科":列1

                             推断sql的写法

                              (case when stage = "基础学科"

                              Then score

                               else Null) as 列1

                               把这个SQL列1放到max(列1)里

  • 相关阅读:
    Linux下hook指定库
    一行一行往上爬
    高可用数据同步方案-SqlServer迁移Mysql实战
    Hystrix核心基础
    Fastjson解析多级泛型的几种方式—使用class文件来解析多级泛型
    面试大全之JVM篇
    云原生下的CICD
    学习Raft算法的笔记
    Go语言下的线程模型
    分布式事务解决方案以及 .Net Core 下的实现(上)
  • 原文地址:https://www.cnblogs.com/simpledu/p/14369669.html
Copyright © 2011-2022 走看看