当前位置 博文首页 > 执剑问道的博客:Oracle中求三门学科都一样的同学姓名。where...

    执剑问道的博客:Oracle中求三门学科都一样的同学姓名。where...

    作者:[db:作者] 时间:2021-07-18 10:08

    有学科表,想求出三门学科都一样的学生姓名;

    create table user2(name varchar2(10),course varchar2(12),score number );
    insert into user2 values('xxx','语文','70');
    insert into user2 values('yyy','数学','80');
    insert into user2 values('xxx','数学','75');
    insert into user2 values('yyy','语文','70');
    insert into user2 values('xxx','英语','80');
    insert into user2 values('yyy','英语','75');
    insert into user2 values('ggg','数学','80');
    insert into user2 values('ggg','英语','75');
    

    结果如下所示;三人中,有两个符合条件,需要求出他们的名字
    在这里插入图片描述
    第一步:这里可以用到where…or…,但这样有个问题,就是会把只有两门的也查出来。

    select name, course
                      from user2
                     where course = '数学'
                        or course = '语文'
                        or course = '英语'
                     group by name, course
    

    结果如图:
    在这里插入图片描述
    第二部:我们用count()over()对学科course进行统计:

    select s.name, s.course, count(course) over(partition by name) c
              from (select name, course
                      from user2
                     where course = '数学'
                        or course = '语文'
                        or course = '英语'
                     group by name, course) s
    

    结果如图所示:
    在这里插入图片描述
    第三步:最后得出结果:

    select *
      from (select s.name, s.course, count(course) over(partition by name) c
              from (select name, course
                      from user2
                     where course = '数学'
                        or course = '语文'
                        or course = '英语'
                     group by name, course) s) s1
     where s1.c = 3;
    

    如图所示:
    在这里插入图片描述

    cs
    下一篇:没有了