【问题标题】:oracle 11g - remove duplicate entries after joinoracle 11g - 加入后删除重复条目
【发布时间】:2015-03-24 20:44:08
【问题描述】:

如果您有两个要加入的表来收集数据,但想要删除重复的表 - 这是如何完成的?

我有两张桌子;学生和课程

一个学生可以多次学习一门课程,但是当询问“过去一年有多少学生参加了 123 课程”时,您不想多次计算该学生,即使他可能已经参加过该课程多次。

示例代码:

select student_id
from student_table
join course_table using (student_id)
where course_id = 123 
and date_taken between '01-JAN-14' AND '31-DEC-14'

当我运行此程序时,我让一些学生出现了 2 或 3 次,因为他们可能在这段时间内参加了 2 或 3 次课程(失败一次或两次,不得不重新参加课程 2 或 3次)。

另外,有没有一种快速的方法可以在显示时按字母顺序对它们进行排序?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    只需按student_id分组:

     select student_id 
     from student_table  
     join course_table using (student_id) 
     where course_id = 123 and 
     date_taken between '01-JAN-14' AND '31-DEC-14' 
     group by student_id;
    

    您可以使用order by进行排序:

     select student_name, student_id 
     from student_table  
     join course_table using (student_id) 
     where course_id = 123 and 
     date_taken between '01-JAN-14' AND '31-DEC-14' 
     group by student_id
     order by student_name asc;
    

    顺便说一句,您可能想使用 real 日期而不是字符串 - 就像您所做的那样:

     select student_name, student_id 
     from student_table  
     join course_table using (student_id) 
     where course_id = 123 and 
     date_taken between TO_DATE('2014/01/01', 'yyyy/mm/dd') AND 
     TO_DATE('2014/12/31', 'yyyy/mm/dd')
     group by student_id
     order by student_name asc;
    

    【讨论】:

    • 谢谢!我还发现不同的作品也是如此。使用 (student_id) 从 student_table 中选择不同的 student_id 加入 course_table,其中 course_id = 123 和 date_take 在 '01-JAN-14' 和 '31-DEC-14' 之间;关于为什么要使用 group 或 distinct 的任何想法?一个比另一个更灵活吗?还是只是偏好?
    【解决方案2】:

    要查找所有参加过课程(至少一次)的学生,请使用distinct

    select distinct student_table.*
    from student_table
    join course_table using (student_id)
    where course_id = 123 
    and date_taken between '01-JAN-14' AND '31-DEC-14'
    

    要简单计算有多少不同学生参加了一门课程,请使用COUNT(DISTINCT student_id)

    select count(distinct student_id)
    from course_table
    where course_id = 123
    and date_taken between '01-JAN-14' AND '31-DEC-14'
    

    还请注意您不需要加入学生表进行计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多