美文网首页
group by和having

group by和having

作者: 一片冰心一生平安 | 来源:发表于2019-03-20 16:21 被阅读0次
    • 自我理解:
      未分组前,是 为单位
      group by分组后,是 为单位

    既然group by分组了,oracle处理数据就是以分组的方式组织。分组中可能包含零条、一条或多条记录,我们不用关心这些,把它当作一个容器。
    好像是这样的结构:容器中是按相同分组归类的记录,然后给容器贴上一个标签,标签名就是这个分组,然后这个'分组'一行(黄颜色标出的)就形成了一张新的虚表,只不过这张虚表指向了容器。

    group by后的结构

    用了group by后,select、having、order by子句中都是在分组的基础上以的思维处理。
    having是对容器进行处理,把结果值加入虚表,然后筛选;
    select显示的结果是新数据(针对分组对应的容器处理后的结果值),而不是表中原始记录(行);

    分组函数有,max, min, avg, sum, count

    总结:

    1. 分组函数只能出现在select, having, order by子句中
    2. 如果在select语句中同时包含有group by, having, order by,那么他们的执行顺序是group by, having, order by
    3. select中如果有列和分组函数,那么这些列必须出现在group by子句中,否则报错。或者说,select后面要么全是分组函数,要么全是字段
      例如
      select max(sal), avg(sal), deptno from emp group by deptno,job having avg(sal)<2000 order by deptno;

    应用案例

    1. 查询表里的重复数据:
        select bmcode from ksl_xh group by bmcode having count(*) > 1
        按照bmcode分组并计数,那一组的数量超过1条则认为重复。

    相关文章

      网友评论

          本文标题:group by和having

          本文链接:https://www.haomeiwen.com/subject/dghtvqtx.html