【发布时间】:2021-02-28 23:45:57
【问题描述】:
基于对学生和学科交叉引用的多级 MANY TO MANY 依赖,如何形成 ORACLE sql/plsql 查询对 Student_Subject 表进行 GROUP,从而使组独立且排他如下?我在实际表中有 519 行。我正在寻找一个高性能的解决方案
示例源表:
预期目标输出:
实际源表数据创建查询
CREATE TABLE student_subject ( student_name, subject_name ) AS
SELECT 'SMITH', 'CHEMISTRY' FROM DUAL UNION ALL
SELECT 'ROBIN', 'PHYSICS' FROM DUAL UNION ALL
SELECT 'SAM', 'PHYSICS' FROM DUAL UNION ALL
SELECT 'SAM', 'MATH' FROM DUAL UNION ALL
SELECT 'JENNY', 'MATH' FROM DUAL UNION ALL
SELECT 'JENNY', 'ACCOUNTS' FROM DUAL UNION ALL
SELECT 'DON', 'ENGLISH' FROM DUAL UNION ALL
SELECT 'DON', 'SPANISH' FROM DUAL UNION ALL
SELECT 'RON', 'HISTORY' FROM DUAL UNION ALL
SELECT 'JOVAN', 'HISTORY' FROM DUAL UNION ALL
-- etc. for an additional 509 more rows
【问题讨论】:
-
组是如何定义的?是否有一栏表明学生/科目所在的组?如果没有这些信息,就无法以您请求的格式拆分数据。例如,为什么史密斯/化学在第 1 组而不在第 4 组?
-
请不要删除问题,过几天再重新提问。
-
@EJEgyed 看起来小组是基于学生之间的间接关系。例如,Robin 和 Sam 一起学习物理,Sam 和 Jenny 一起学习数学。因此,所有 Robin、Sam 和 Jenny 记录都在同一个组中。
-
@MatthewMcPeak:听起来不错。但是,要使这个问题成为主题,它至少需要明确指定。
-
供将来参考:不要尝试将 500 多行放入一个问题中。根本没有必要这样做,您只需要几个示例行来说明更大的问题。如果你必须包含一个更大的集合,你总是可以引用一个 dbfiddle。我已将您的数据集移至一个;你只设法放入 475 行,所以这就是我们可以使用的。或者您可以使用dataset from your deleted question,它略有不同,包含 518 行。
标签: sql oracle plsql many-to-many hierarchy