【问题标题】:oracle sql query using group byoracle sql查询使用group by
【发布时间】:2014-12-17 10:51:09
【问题描述】:

我有以下架构,

学生(名字、姓氏、SID)
已注册(学生 ID、课程 ID)
课程(CID、课程名称、部门)

我需要弄清楚哪些学生参加的 CSC 课程比 IT 多。 CSC 和 IT 位位于 Department 类别中。我有以下查询,其中列出了所有注册课程的学生以及他们注册了多少 CSC 课程。

select studentid,count(department) as cscclasses
from enrolled
left join course
on courseid = cid
and department = 'CSC'
group by studentid;

不太清楚如何将这个数字与注册 IT 课程的人数进行比较。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以尝试使用sum 和case

    select studentid
    from(
        select studentid,
            SUM(CASE WHEN department='CSC'
                              THEN 1
                              ELSE 0
                      END) as cscclasses,
            SUM(CASE WHEN department='IT'
                              THEN 1
                              ELSE 0
                      END) as itclasses
        from enrolled
        left join course
        on courseid = cid
        and department = 'CSC' OR department = 'IT'
        group by studentid
    )
    where cscclasses > itclasses
    

    【讨论】:

      【解决方案2】:

      在 CTE 中,计算每个学生的 CSC 和 IT 课程数

         With CTE
         As
        (
               select studentid,
                  SUM(case when 
                   department ='CSC' 
                   then 1 else 0 
                   end) as CSCCount ,
                  SUM(case when 
                   department ='IT' 
                   then 1 else 0 
                   end) as ITCount ,
               from enrolled
               left join course
               on courseid = cid
              And Sid =studentid
              group by studentid
        )
       Select E.* FROM
      JOIN CTE
      On CTE.studentid = E.sid
      Where CTE.CSCCount >      CTE.ITCount
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 2016-02-20
        • 1970-01-01
        相关资源
        最近更新 更多