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

显示:

1
2
3
jiuzhou|600
qita|450
siguo|650

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

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

显示的结果是:

1
2
3
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

这里有这么一段话:

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

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

case3 :

1
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明白了;

更好的

 

posted @   honpey  阅读(550)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示