select case pref_name when 'fudao' then 'siguo' when 'xiangchuan' then 'siguo' when 'aiyuan' then 'siguo' when 'gaozhi' 
  then 'siguo' when 'fugang' then 'jiuzhou' when 'zuohe' then 'jiuzhou' when 'changqi' then 'jiuzhou' else
'qita' end as district, sum(population)
from poptbl
group by case pref_name
when 'dedao' then 'siguo'
when 'xiangchuan' then 'siguo'
when 'aiyuan' then 'siguo'
when 'gaozhi' then 'siguo'
when 'fugang' then 'jiuzhou'
when 'zuohe' then 'jiuzhou'
when 'changqi' then 'jiuzhou'
else 'qita' end;

显示:

jiuzhou|600
qita|450
siguo|650

2. 所以group by到底是做了啥事情了呢?为了验证group by都做了啥子事情,对1)中的sql做如下改动,在select语句中直接select出所有的

select * from poptbl group by case pref_name 
when 'dedao' then 'siguo'
when 'xiangchuan' then 'siguo'
when 'aiyuan' then 'siguo'
when 'gaozhi' then 'siguo'
when 'fugang' then 'jiuzhou'
when 'zuohe' then 'jiuzhou'
when 'changqi' then 'jiuzhou'
else 'qita' end;

显示的结果是:

changqi|200
qunma|50
gaozhi|200

所以大致能看到,group by按照'siguo' 'jiuzhou' 'qita'对整个数据库做出了划分,并且在最后划分的数据集合中,其实还是只有两个域(pref_name和population),也就是说在group by中整的这些个域都是没用的!只是起到了一个划分的作用,所以group by在最后到底是做了啥子事情呢?group by会把整个数据库中的

https://stackoverflow.com/questions/7434657/how-does-group-by-work

这里有这么一段话:

GROUP BY returns a single row for each unique combination of the GROUP BY fields.

所以,当我们select的时候,就返回了最后的一行的数据;那么当1)中的case when语句和最后的case when语句如果不同的话,会发生什么事情呢?我们测试一下

case3 :

select case pref_name when 'dedao' then 'siguo' when 'xiangchuan' then 'jiuzhou' else 'qita' end as district, sum(population) from poptbl group by case pref_name when 'dedao' then 'siguo' when 'xiangchuan' then 'siguo' else 'qita' end;

所以,在整个sql中,总是输出一行数据,这里虽然group by聚类的时候,大家把dedao和xiangchuan都定义成了siguo,但是在select计算的时候,总是会按照整个集合中最后一条的数据来,如果我们把xiangchuan定义成了jiuzhou,那么此时select输出的就是jiuzhou!group明白了;

更好的

sql学习. case + group by 都干了啥子事情的更多相关文章

  1. sql 学习之 group by 及 聚合函数

    1.在使用 GROUP BY 子句时,Select列表中的所有列必须是聚合列(SUM,MIN/MAX,AVG等)或是GROUP BY 子句中包括的列.同样,如果在SELECT 列表中使用聚合列,SEL ...

  2. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?

    binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...

  3. SQL学习之分组数据Group by

    简介:"Group By"根据字面上的意思理解,就是根据"By"后面指定的规则对数据进行分组(分组就是将一个数据集按照"By"指定的规则分成 ...

  4. 基于实际项目的SQL学习总结

    青云   随笔 - 2, 文章 - 0, 评论 - 1, 引用 - 0 一个项目涉及到的50个Sql语句(整理版) /* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测 ...

  5. TERADATA SQL学习随笔<一>

    此博客内容简介及目录 http://www.cnblogs.com/weibaar/p/6644261.html 最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目 ...

  6. SQL Server case表达式的用法

    ★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...

  7. sql语句的group by 与 inner join

    一.理解group by和聚合函数 先来看下表1,表名为test: 表1 执行如下SQL语句: 1 2 SELECT name FROM test GROUP BY name 你应该很容易知道运行的结 ...

  8. SQL学习(时间,存储过程,触发器)

    SQL学习 几个操作时间的函数 --datapart 获取时间中的年月日时分秒等部分 select DATEPART(year,current_timestamp); select DATEPART( ...

  9. 神奇的 SQL 之 CASE表达式,妙用多多 !

    前言 历史考试选择题:黄花岗起义第一枪谁开的? A宋教仁 B孙中山 C黄兴 D徐锡麟,考生选C. 又看第二题:黄花岗起义第二枪谁开的? 考生傻了,就选了个B. 接着看第三题:黄花岗起义中,第三枪谁开的 ...

随机推荐

  1. 1997: [Hnoi2010]Planar

    1997: [Hnoi2010]Planar 链接 分析: 首先在给定的那个环上考虑进行操作,如果环内有有两条边相交,那么可以把其中的一条放到环的外面去.所以转换为2-sat问题. 像这样,由于1-4 ...

  2. Deep Learning 资料总结

    http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/ : 理解神经网络   ELU:

  3. 实战中的asp.net core结合Consul集群&Docker实现服务治理

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在 ...

  4. 关于docker线上部署时间问题

    背景 公司线上部署采用docker swarm方式,这几天线上项目时间突然出了问题(ps:第一反应,我去,这也能出问题,代码里肯定藏毒了),线上时间总跟实际时间差八个小时.本着速战速决的原则,把所有时 ...

  5. 机器学习算法 --- Pruning (decision trees) & Random Forest Algorithm

    一.Table for Content 在之前的文章中我们介绍了Decision Trees Agorithms,然而这个学习算法有一个很大的弊端,就是很容易出现Overfitting,为了解决此问题 ...

  6. Windows下 搭建redis集群

    Windows下搭建redis集群教程 一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主 ...

  7. C++多态深入分析!

    以下分析是基于VS2010的.以后会使用G++分析看看G++如何处理多态! // polymorphic_test.cpp : 定义控制台应用程序的入口点. // /** 特别注意:实现C++多态,除 ...

  8. LeetCode 566. Reshape the Matrix (C++)

    题目: In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a n ...

  9. Alpha发布PSP Daily评价总结报告

    Alpha发布PSP Daily评价总结报告 优点: 1.用户人群较为明确,定位较为准确. 2.亮点:暂停任务时是无法结束当前任务的. 3.说明书写的详细.语言流畅.能实现的功能都体现出来. 4.下拉 ...

  10. “Hello World!“”团队第七周召开的第二次会议

    今天是我们团队“Hello World!”团队第七周召开的第二次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码 一 ...