首页 > 数据库技术 > 详细

sql学习. case + group by 都干了啥子事情

时间:2019-03-31 17:37:41      阅读:187      评论:0      收藏:0      [点我收藏+]

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 都干了啥子事情

原文:https://www.cnblogs.com/honpey/p/10632070.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!