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:将已有编号方式转换为新的方式并统计的更多相关文章

  1. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  2. (一)《SQL进阶教程》学习记录--CASE

    背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL ...

  3. 《SQL基础教程》+ 《SQL进阶教程》 学习笔记

    写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...

  4. 《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 ...

  5. 《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 ...

  6. 《SQL 进阶教程》 case:练习题1-1-2 转换行列——在表头里加入汇总列

    select case when sex = 1 then '男性' else '女性' end as '性别', sum(case when name='哈尔滨' THEN population e ...

  7. 《SQL 进阶教程》 case:在 CASE 表达式中使用聚合函数

    1.只加入一个社团的学生的社团id select std_id, max(club_id) from student_clubgroup by std_idhaving count(*) =1---- ...

  8. 《SQL 进阶教程》case :用一条 SQL 语句进行不同条件的统计

    进行不同条件的统计是case表达式的著名用法之一 select name,sum(case when sex = 1 then population else 0 end) as cnt_m,sum( ...

  9. 《SQL 进阶教程》 case:在 UPDATE 语句里进行条件分支

    1.对当前工资为30万日元以上的员工,降薪10%:2.对当前工资为25万日元以上且不满28万日元的员工,加薪20% update salaries set salary = case when sal ...

随机推荐

  1. dotnet core on Linux 环境搭建及入门demo

    首先感谢张善友大大提供的腾讯云实验室链接(https://www.qcloud.com/developer/labs/list). 以下是整个搭建过程及简单demo实例 1.搭建 .NET Core ...

  2. 金色酒类企业dedecms模板

    金色酒类企业dedecms模板,网站模板,dedecms模板. 模板地址:http://www.huiyi8.com/sc/7276.html

  3. 【Codeforces】Gym 101608G WiFi Password 二分+线段树

    题意 给定$n$个数,求有最长的区间长度使得区间内数的按位或小于等于给定$v$ 二分区间长度,线段树处理出区间或,对每一位区间判断 时间复杂度$O(n\log n \log n)$ 代码 #inclu ...

  4. 小心transform

    张老师总结的,感谢! <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. python之django入门

    一.搭建开发环境 使用virualenv创建虚拟python环境 pip install virtualenv [root@master djiango]# find / -name virtuale ...

  6. 详解使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...

  7. javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片

    javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...

  8. 打印菱形(Print Diamond/Lozenge)

      → ↓     *       * * *   * * * * *   * * *       *     总结了一下关于打印菱形的思路. 通常是从循环变量之间的映射关系入手,推导出相应的公式.这 ...

  9. Html5 canvas 元素

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  10. Vijos:P1117数的划分

    描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法. 格式 输入 ...