SQL case when 语句解析

一,原始单表(也是从其余博客看到)及其查询后效果。数据库

原始表:函数

查询后(要求查询后按照洲统计人口):学习

二,SQL探讨
spa

*初始化insert语以下:code

INSERT INTO cptable VALUES (NULL ,'中国',600);博客

INSERT INTO cptable VALUES (NULL ,'美国',100);io

INSERT INTO cptable VALUES (NULL ,'加拿大',100);table

INSERT INTO cptable VALUES (NULL ,'英国',200);基础

INSERT INTO cptable VALUES (NULL ,'法国',300);扩展

INSERT INTO cptable VALUES (NULL ,'日本',250);

INSERT INTO cptable VALUES (NULL ,'德国',200);

INSERT INTO cptable VALUES (NULL ,'墨西哥',50);

INSERT INTO cptable VALUES (NULL ,'印度',250);

*SQL查询语句

表达方式A:

SELECT  SUM(population),
CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大'  THEN '北美洲'
WHEN '墨西哥'  THEN '北美洲'
ELSE '其余' END
FROM    cptable
GROUP BY CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大'  THEN '北美洲'
WHEN '墨西哥'  THEN '北美洲'
ELSE '其余' END;

表达方式B:

SELECT sum(population) AS population,
  (CASE
    WHEN country IN ('中国','日本','印度')THEN '亚洲'
    WHEN country IN ('加拿大','美国','墨西哥') THEN  '北美洲'
    else '其余' end) AS area
FROM cptable GROUP BY area;

        得出的结果都正确的,当我看到其余博客写的是表达方式A的时候,我的感受特别繁琐,并非说表达方式A中的多个when then 语句,而是 group by 先后都写了一样的SQL代码;让咱们一块儿学习case when语句的方法,case when 语句其实就是在查询出来原始表后再作处理,添加新的列表,新增的列中的值以原始表列值为基础进行计算显示;

例如执行如下SQL:

SELECT cptable.country AS country,cptable.population AS population,
  (CASE
    WHEN country IN ('中国','日本','印度')THEN '亚洲'
    WHEN country IN ('加拿大','美国','墨西哥') THEN  '北美洲'
    else '其余' end) AS area
FROM cptable;

获得的结果以下:

        以上查询结果,一共有三列,分别为country,population, area。白色方框中的数据和原始表并没有区别,而area这一列是自定义的,能够说是原始表结果的一个扩展信息。

        咱们能够试着这样去理解,当数据库查询出原始数据第一行并想填充area这一列的时候发现该行country列为中国,根据自定义的when case语句 ,该行的area列只能填充‘亚洲’这个value;相似经过函数area = f(country,population),以数据表行为基础这一个维度,经过已有条件来设置新列的值,以此类推,数据库查询扫描第二行,根据自定义when case的规则得出结果area只能赋值‘北美洲’。。。。。。

咱们查询显示时候,隐去不须要被看到的结果集如country列,而后group by area 经过area分组,SUM函数获得每组的总数,最后得出正确结果;

相关文章
相关标签/搜索