zoukankan      html  css  js  c++  java
  • 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明白了;

    更好的

  • 相关阅读:
    Window7幻灯片字体显示混乱,难道真的是病毒么
    COCOS2DX 3.0 优化提升渲染速度 Auto-batching
    iOS 打印出视图中全部的子视图的名称
    【linux】学习2
    【编程之美】2.16 求数组的最大递增子序列
    【linux】学习1
    【编程之美】2.15 子数组之和的最大值(二维)
    【编程之美】2.14 求数组的子数组之和的最大值
    【QT】视频播放
    【编程之美】3.5 最短摘要的生成
  • 原文地址:https://www.cnblogs.com/honpey/p/10632070.html
Copyright © 2011-2022 走看看