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



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

    更好的

  • 相关阅读:
    【NYOJ】[22]素数求和问题
    【NYOJ】[13]Fibonacci数
    【NYOJ】[13]Fibonacci数
    【CodeForces】[606A]Magic Spheres
    【CodeForces】[606A]Magic Spheres
    【杭电】[1201]18岁生日
    【杭电】[1201]18岁生日
    【杭电】[1994]利息计算
    【杭电】[1994]利息计算
    新型量子云装置问世 让你免费体验量子计算机
  • 原文地址:https://www.cnblogs.com/honpey/p/10632070.html
Copyright © 2020-2023  润新知