《SQL 进阶教程》 case:将已有编号方式转换为新的方式并统计
SQL 权威指南
SQL 解惑
在进行非定制化统计时,需要将已有编号方式转换为另外一种便于分析的方式进行统计需求

select
case
when name='哈尔滨' then '黑龙江'
when name='大庆' then '黑龙江'
when name='齐齐哈尔' then '黑龙江'
when name='长春' then '吉林'
when name='吉林' then '吉林'
when name='沈阳' then '辽宁'
when name='大连' then '辽宁'
when name='葫芦岛' then '辽宁'
else '其他'
end as province,sum(population)
from city_population
GROUP BY
case
when name='哈尔滨' then '黑龙江'
when name='大庆' then '黑龙江'
when name='齐齐哈尔' then '黑龙江'
when name='长春' then '吉林'
when name='吉林' then '吉林'
when name='沈阳' then '辽宁'
when name='大连' then '辽宁'
when name='葫芦岛' then '辽宁'
else '其他' end
select
case
when name='哈尔滨' then '黑龙江'
when name='大庆' then '黑龙江'
when name='齐齐哈尔' then '黑龙江'
when name='长春' then '吉林'
when name='吉林' then '吉林'
when name='沈阳' then '辽宁'
when name='大连' then '辽宁'
when name='葫芦岛' then '辽宁'
else '其他'
end as province,sum(population)
from city_population
group by province
严格来说,这种写法违反标准sql规范,因为Group by 比select 语句先知,
所以group by 子句中引用在select 子句里定义的别称是不被允许的,
事实上,在oracle、DB2、SQLServer 等数据库采用这种写法时就会出错
将人口按照适当的级别进行分类统计
select
case
when population < 100 then '1'
when population >=100 and population <200 then '2'
when population >=200 and population < 400 then '3'
else '4' end as pop_class,count(*) as cnt
from city_population
GROUP BY pop_class
《SQL 进阶教程》 case:将已有编号方式转换为新的方式并统计的更多相关文章
- SQL进阶随笔--case用法(一)
SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...
- (一)《SQL进阶教程》学习记录--CASE
背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL ...
- 《SQL基础教程》+ 《SQL进阶教程》 学习笔记
写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...
- 《SQL 进阶教程》 case:练习题1-1-3 用 ORDER BY 指定顺序进行排序
select name from greatestsORDER BY case when name ='B' then 1 when name ='A' then 2 when name ='D' t ...
- 《SQL 进阶教程》 case:练习题1-1-1 多列数据的最大值
select name, case when case when x > y then x else y end < z then z else case when x < y th ...
- 《SQL 进阶教程》 case:练习题1-1-2 转换行列——在表头里加入汇总列
select case when sex = 1 then '男性' else '女性' end as '性别', sum(case when name='哈尔滨' THEN population e ...
- 《SQL 进阶教程》 case:在 CASE 表达式中使用聚合函数
1.只加入一个社团的学生的社团id select std_id, max(club_id) from student_clubgroup by std_idhaving count(*) =1---- ...
- 《SQL 进阶教程》case :用一条 SQL 语句进行不同条件的统计
进行不同条件的统计是case表达式的著名用法之一 select name,sum(case when sex = 1 then population else 0 end) as cnt_m,sum( ...
- 《SQL 进阶教程》 case:在 UPDATE 语句里进行条件分支
1.对当前工资为30万日元以上的员工,降薪10%:2.对当前工资为25万日元以上且不满28万日元的员工,加薪20% update salaries set salary = case when sal ...
随机推荐
- 51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158 1158 全是1的最大子矩阵 基准时间限制:1 秒 空 ...
- vs2010 windows service 项目不能引用类库项目
在一个windows 服务项目A中,引用了另外一个项目B,可以使用自动完成,引用其他项目中的类,按理,可以自动提示了,应该就是没问题了,但编译时却提示"未能找到类型或命名空间名称" ...
- 算法(Algorithms)第4版 练习 1.3.26
方法实现: //1.3.26 /** * remove all of the nodes in the list that have key as its item field * * @param ...
- [干货]兼容HTML5的Placeholder属性-更新版v0.10102013
HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等.Placeholder是HTML5新增的另一个属性,当input或者textarea设置了 ...
- Codeforces 872C Maximum splitting:数学【分解成合数之和】
题目链接:http://codeforces.com/contest/872/problem/C 题意: 给你一个数n,问你最多能将n分解成多少个合数之和.(若不能分解,输出-1) 题解: 若要让合数 ...
- Linux_异常_04_ftp: command not found...
今天在centos上使用ftp命令连接本机的FTP服务器(本机FTP服务使用Vsftpd搭建),出现如下的错误提示:-bash: ftp: command not found 查询相关资料,发现很有可 ...
- Struts2与ServletAPI解耦
什么是与Servlet API解耦? 为了避免与servlet API耦合在一起,方便Action做单元测试, Struts2对HttpServletRequest,HttpSession,和Serv ...
- Java IO(输入输出)
1. System.out.System.in System 内部: public final static InputStream in = null; public final static Pr ...
- ZJOI2012题解
t1灾难 给一个食物网 如果一个生物吃的所有东西都灭绝了 它也跟着灭绝 求每个生物灭绝时跟着灭绝的生物数量 支配树裸题,我们先拓扑排序,然后建立一棵树满足一个点灭绝时,有且仅有它的子树跟着灭绝 考虑如 ...
- linux 中spfvim安装
1. 安装 git 1.1 安装依赖的包: curl curl-devel zlib-devel openssl-devel perl c ...