sql - Oracle SQL : Finding common subjects taken by students in each class

标签 sql oracle

下面是学生表 DDL 和 DML

CREATE TABLE STUDENTS
(
  CLASS NUMBER,
  STUDENT_ROLLNO  NUMBER,
  SUBJECT VARCHAR2(50)
);

INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 1,'ENGLISH');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 1,  'MATHS');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 1,  'SCIENCE');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 1,  'ART');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 2,  'ENGLISH');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 2,  'MATHS');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 2,  'FRENCH');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 2,  'POETRY');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 3,  'ENGLISH');
INSERT INTO STUDENTS(CLASS, STUDENT_ROLLNO, SUBJECT) VALUES(1, 3,  'MATHS');

现在我需要找到该类(class)每个学生选择的共同科目。
对于这种情况,结果是 ENGLISH 和 MATHS。

我需要编写查询来获取所需的结果,因为它们是更多类,结果应该是每个类。

谢谢。

最佳答案

尝试这个

 WITH SUB1 AS (
SELECT  
CLASS,SUBJECT,COUNT(*) NMB  FROM
STUDENTS
GROUP BY CLASS,SUBJECT
),SUB2 AS(
SELECT CLASS, MAX(NMB)MAX_NMB FROM
(SELECT  
CLASS,COUNT(*) NMB  FROM
STUDENTS
GROUP BY CLASS,SUBJECT
)
GROUP BY CLASS
)
SELECT SUB1.CLASS,SUB1.SUBJECT
FROM SUB1
INNER JOIN SUB2
ON SUB1.NMB=SUB2.MAX_NMB  AND SUB1.CLASS=SUB2.CLASS

关于sql - Oracle SQL : Finding common subjects taken by students in each class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650063/

相关文章:

mysql - 我可以连接不同数据库中的两个表,并且只有一个匹配项与 MySQL 中表中重复的每一行的总和值相匹配吗?

mysql - 一个奇怪的 Oracle SQL,有 3 个表,但在 where 子句中只留下 join 2?

java - 使用java从以WE8ISO8859P1编码的Oracle数据库读取阿拉伯文本

oracle 程序给出 ORA-00905 : missing keyword

sql - lsof 如果文件描述符已打开

php - PDO UPDATE 似乎不存储引号?

java - 映射文件中的 Hibernate 'Inverse'

SQL 查询 : transform rows to columns

Oracle数据库中日期的PHP格式

java - 用于在 Oracle 中调用过程的 Jdbc 实用程序