【问题标题】:Using oracle SQL to find duplicates使用 oracle SQL 查找重复项
【发布时间】:2020-02-03 20:01:23
【问题描述】:

我正在检查学生的考试成绩,并且有几个不同的感兴趣的表格。

STUDENTTEST 有 testID、test_date 和 studentID。 STUDENTS 有 student_name,它有一个名为 ID 的变量,该变量链接到 STUDENTTEST 的 studentid。

我想查找具有 testID 和 test_date 相同记录的学生。而且我希望能够有一个指向学生表的链接,这样我就可以看到哪些学生的名字有重复。

我希望这是有道理的!谢谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以join students 和 student_tests 表,按学生、测试 ID 和测试日期分组,然后使用 having 子句过滤以仅保留重复项:

    select s.id, s.student_name, t.test_id, t.test_date, count(*) cnt_duplicates
    from students s
    inner join student_tests t on t.student_id = s.id
    group by s.id, s.student_name, t.test_id, t.test_date
    having count(*) > 1
    

    【讨论】:

    • 我想我错误地陈述了我的问题...我确实有一个完整的子查询(它只是称为查询),其中包含学生 ID。它有学生和学生测试表。我如何将重复项加入该表?
    • @ESIRMITS:如果不查看整个现有查询(或者如果它太大,则它的简化版本)就无法回答。我建议您为此提出一个 new 问题,因为 this question 的答案已经发布
    【解决方案2】:

    你可以尝试使用一个组并让 count(*) >1

     select * 
     from STUDENTTEST T
     inner join STUDENTS  S ON s.ID = T.studentid
     group  testID, test_date,  studentID
     having count(*) >1
    

    【讨论】:

      【解决方案3】:

      嗯。 . .您似乎想要在同一日期多次参加同一考试的学生。我在想:

      select *
      from students s join
           (select testID, test_date, studentID, count(*) as cnt
            from studenttests st
            group by testID, test_date, studentID
            having count(*) >= 2
           ) st
           using (studentid);
      

      这将为满足您条件的每个学生/测试组合返回一行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多