sql学习. case + group by 都干了啥子事情
1 | <br> select case pref_name when 'fudao' then 'siguo' when 'xiangchuan' then 'siguo' when 'aiyuan' then 'siguo' when 'gaozhi' <br> then 'siguo' when 'fugang' then 'jiuzhou' when 'zuohe' then 'jiuzhou' when 'changqi' then 'jiuzhou' else <br> 'qita' end as district, sum(population) <br>from poptbl <br>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 | 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明白了;
更好的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步