首页 > 解决方案 > SQL中的条件COUNT与表连接

问题描述

我有这个查询:

SQL> SELECT DISTINCT Module.module_name, Instructor.Instructor_name
  2  FROM InstructorMailingAddressModPer
  3  JOIN Module ON InstructorMailingAddressModPer.module_id = Module.module_id
  4  JOIN Instructor ON InstructorMailingAddressModPer.instructor_id = Instructor.instructor_id
  5  ORDER BY module_name;

结果如下表: 在此处输入图像描述

我试图只显示多个讲师的结果,例如针对经理、数据库等的模块名称的会计和财务

我想出了以下查询,但搞砸了,这个查询只是为了说明我的思考过程:

SELECT Module.module_name, Instructor.Instructor_name
  2  FROM (
  3     SELECT Module.module_name, Instructor.Instructor_name
  4     COUNT(DISTINCT InstructorMailingAddressModPer.module_id) CNT
  5     FROM InstructorMailingAddressModPer
  6     JOIN Instructor ON InstructorMailingAddressModPer.instructor_id = Instructor.instructor_id
  7     JOIN Module ON InstructorMailingAddressModPer.module_id = Module.module_id
  8  WHERE CNT > 1;

标签: sqloraclejoincount

解决方案


一种方法是窗口函数:

SELECT module_name, Instructor_name, cnt
FROM (SELECT m.module_name, i.Instructor_name,
             COUNT(*) OVER (PARTITION BY m.module_name) as cnt
      FROM InstructorMailingAddressModPer ima JOIN
           Module m
           ON ima.module_id = m.module_id JOIN
           Instructor i
           ON ima.instructor_id = i.instructor_id
     ) mi
WHERE cnt > 1
ORDER BY module_name;

推荐阅读