質問編集履歴
8
プライバシーの観点から、一部コードを削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
以下の4つのテーブルがあります
|
3
|
+
以下の4つのテーブルがあります。
|
4
4
|
|
5
5
|
|
6
6
|
|
@@ -8,33 +8,27 @@
|
|
8
8
|
|
9
9
|
DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
|
10
10
|
|
11
|
-

|
12
|
-
|
13
11
|
|
14
12
|
|
15
13
|
2
|
16
14
|
|
17
|
-
|
15
|
+
Course:大学の講義のコードと講義名を持つ
|
18
16
|
|
19
|
-
|
17
|
+
科目コード、コース名
|
20
18
|
|
21
19
|
|
22
20
|
|
23
21
|
3
|
24
22
|
|
25
|
-
|
23
|
+
Section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
|
26
24
|
|
27
25
|
***ここではセクション=各学期に開かれる講義と定義します。例えば、「数学1」という科目(Course)が2017年春と2017年秋に開かれたとき、それぞれの学期の講義を別々のセクションとして認識します。セクションが多、科目が一の関係です)。
|
28
|
-
|
29
|
-

|
30
26
|
|
31
27
|
|
32
28
|
|
33
29
|
4
|
34
30
|
|
35
|
-
GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)
|
31
|
+
GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)を持つ。
|
36
|
-
|
37
|
-

|
38
32
|
|
39
33
|
|
40
34
|
|
@@ -42,7 +36,17 @@
|
|
42
36
|
|
43
37
|
以下のようなテーブルを作成したいです。
|
44
38
|
|
39
|
+
|学部名|科目コード|科目名|A|B|C|履修生徒数
|
40
|
+
|
41
|
+
|:--|:--:|--:|
|
42
|
+
|
45
|
-
|
43
|
+
|chemistry|001|organic chemistry|3|5|5|16|
|
44
|
+
|
45
|
+
|biology|002|genetics|2|1|0|10|
|
46
|
+
|
47
|
+
|physics|003|quantum physics|0|3|3|6|
|
48
|
+
|
49
|
+
|
46
50
|
|
47
51
|
科目をすべて列挙して、その科目を取った学生のGradeをGrade別にカウントして、さらにその合計を一番右に表示したいです。ただし、以下のような条件があります。
|
48
52
|
|
@@ -52,15 +56,13 @@
|
|
52
56
|
|
53
57
|
0. もし、Grade Dをとった生徒の数またはGrade Fをとった生徒の数がGrade Cをとった生徒の数より多かった場合は、その科目を表示しません。
|
54
58
|
|
55
|
-
0. Dept Name, A, B, C, D, F, Course Numberの順でソートします(A, B, C
|
59
|
+
0. Dept Name, A, B, C, D, F, Course Numberの順でソートします(A, B, C はDesc、それ以外はAcsです)。
|
56
60
|
|
57
61
|
###発生している問題・エラーメッセージ
|
58
62
|
|
59
63
|
|
60
64
|
|
61
|
-
自分でいろいろ試してみて、とりあえず、カラムだけは目的のテーブルと同じものができました。ただ、
|
65
|
+
自分でいろいろ試してみて、とりあえず、カラムだけは目的のテーブルと同じものができました。ただ、PIVOTがうまくいかず、Gradeの値とその合計がとれずすべて0になってしまいます。
|
62
|
-
|
63
|
-

|
64
66
|
|
65
67
|
|
66
68
|
|
@@ -69,114 +71,6 @@
|
|
69
71
|
0. Inline selectの中のSQLではGradeのデータが取れているのに、Pivotではなぜかカウントされない。
|
70
72
|
|
71
73
|
0. 一番右のカラム"TotalEnroll"がPivotが分類する要素の一つになっていて合計をとるようになってない。
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
Inline selectの中のコードは今のSQLで以下のような結果を返しています(これであっている、と思います。。。)。
|
76
|
-
|
77
|
-

|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
###該当のソースコード
|
84
|
-
|
85
|
-
「試したこと」の具体的内容として、コメントはあえてすべて残していましたがプライバシーの観点から一部削除しました。ご了承ください。
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
select
|
90
|
-
|
91
|
-
*
|
92
|
-
|
93
|
-
from (
|
94
|
-
|
95
|
-
select
|
96
|
-
|
97
|
-
dptm.dname as "Dept Name"
|
98
|
-
|
99
|
-
,co.course_number as "Course Num"
|
100
|
-
|
101
|
-
,co.course_name as "Course Name"
|
102
|
-
|
103
|
-
,co.course_name as "Course Name for grade"
|
104
|
-
|
105
|
-
-- ,"NumOfStEachCo"."numOfStEachCo" as "numOfStEachCo"
|
106
|
-
|
107
|
-
,gr.grade as "grade"
|
108
|
-
|
109
|
-
-- ,"NumOfStEachCo"."numOfStEachCo" as "TotalEnrollEachCourse"
|
110
|
-
|
111
|
-
from
|
112
|
-
|
113
|
-
eb.course co
|
114
|
-
|
115
|
-
join EB.DEPARTMENT_TO_MAJOR dptm on (co.OFFERING_DEPT = dptm.DCODE)
|
116
|
-
|
117
|
-
join eb.section se on (se.COURSE_NUM = co.COURSE_NUMBER)
|
118
|
-
|
119
|
-
join EB.GRADE_REPORT gr on (gr.SECTION_ID = se.SECTION_ID)
|
120
|
-
|
121
|
-
-- return the number of enrollments for each course
|
122
|
-
|
123
|
-
left outer join (
|
124
|
-
|
125
|
-
select
|
126
|
-
|
127
|
-
co2.COURSE_NUMBER
|
128
|
-
|
129
|
-
-- "If a student enrolls in two courses (or in the same course twice), do not count the student twice.". So not add distinct
|
130
|
-
|
131
|
-
,count(co2.COURSE_NUMBER) as "numOfStEachCo"
|
132
|
-
|
133
|
-
from
|
134
|
-
|
135
|
-
GRADE_REPORT gr2
|
136
|
-
|
137
|
-
join SECTION se2 on (gr2.SECTION_ID = se2.SECTION_ID)
|
138
|
-
|
139
|
-
join COURSE co2 on (se2.COURSE_NUM = co2.COURSE_NUMBER)
|
140
|
-
|
141
|
-
where 1=1
|
142
|
-
|
143
|
-
group by
|
144
|
-
|
145
|
-
co2.COURSE_NUMBER
|
146
|
-
|
147
|
-
) "NumOfStEachCo" on ("NumOfStEachCo".COURSE_NUMBER = co.COURSE_NUMBER)
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
)
|
152
|
-
|
153
|
-
pivot(count("grade") for "Course Name for grade"
|
154
|
-
|
155
|
-
in ('A' as A ,'B' as B,'C' as C,'D' as D,'F' as F, 'TotalEnroll' as "TotalEnroll")
|
156
|
-
|
157
|
-
-- in ('A','B','C','D','F', 'TotalEnroll' as "TotalEnrollEachCourse")
|
158
|
-
|
159
|
-
)
|
160
|
-
|
161
|
-
order by
|
162
|
-
|
163
|
-
"Dept Name" asc
|
164
|
-
|
165
|
-
,A desc
|
166
|
-
|
167
|
-
,B desc
|
168
|
-
|
169
|
-
,C desc
|
170
|
-
|
171
|
-
,D desc
|
172
|
-
|
173
|
-
,F desc
|
174
|
-
|
175
|
-
,"Course Num"
|
176
|
-
|
177
|
-
;
|
178
|
-
|
179
|
-
|
180
74
|
|
181
75
|
|
182
76
|
|
7
プライバシーの観点から、「該当のソースコードを一部削除」
test
CHANGED
File without changes
|
test
CHANGED
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
###該当のソースコード
|
84
84
|
|
85
|
-
「試したこと」の具体的内容として、コメントはあえてすべて残していま
|
85
|
+
「試したこと」の具体的内容として、コメントはあえてすべて残していましたがプライバシーの観点から一部削除しました。ご了承ください。
|
86
86
|
|
87
87
|
|
88
88
|
|
@@ -90,30 +90,10 @@
|
|
90
90
|
|
91
91
|
*
|
92
92
|
|
93
|
-
-- "NumOfEnrollEachCo"."Dept Name" as "Dept Name"
|
94
|
-
|
95
|
-
-- ,"NumOfEnrollEachCo"."Course Num" as "Course Num"
|
96
|
-
|
97
|
-
-- ,"NumOfEnrollEachCo"."Course Name" as "Course Name"
|
98
|
-
|
99
|
-
-- ,"NumOfEnrollEachCo"."Course Name for grade" as "Course Name for grade"
|
100
|
-
|
101
|
-
---- ,"NumOfStEachCo"."numOfStEachCo" as "numOfStEachCo"
|
102
|
-
|
103
|
-
-- ,"NumOfEnrollEachCo"."grade" as "grade"
|
104
|
-
|
105
|
-
-- ,"NumOfEnrollEachCo"."TotalEnrollEachCourse" as "TotalEnrollEachCourse"
|
106
|
-
|
107
93
|
from (
|
108
94
|
|
109
95
|
select
|
110
96
|
|
111
|
-
-- dptm.dname as "Dept Name "
|
112
|
-
|
113
|
-
-- ,co.course_number as "Course Num"
|
114
|
-
|
115
|
-
-- ,co.course_name as "Course Name"
|
116
|
-
|
117
97
|
dptm.dname as "Dept Name"
|
118
98
|
|
119
99
|
,co.course_number as "Course Num"
|
@@ -130,8 +110,6 @@
|
|
130
110
|
|
131
111
|
from
|
132
112
|
|
133
|
-
-- Do not display courses where NO grades exist (i.e., no one has received an A, B, C, D, or F). So, not add left outer join
|
134
|
-
|
135
113
|
eb.course co
|
136
114
|
|
137
115
|
join EB.DEPARTMENT_TO_MAJOR dptm on (co.OFFERING_DEPT = dptm.DCODE)
|
@@ -154,11 +132,11 @@
|
|
154
132
|
|
155
133
|
from
|
156
134
|
|
157
|
-
|
135
|
+
GRADE_REPORT gr2
|
158
|
-
|
136
|
+
|
159
|
-
join
|
137
|
+
join SECTION se2 on (gr2.SECTION_ID = se2.SECTION_ID)
|
160
|
-
|
138
|
+
|
161
|
-
join
|
139
|
+
join COURSE co2 on (se2.COURSE_NUM = co2.COURSE_NUMBER)
|
162
140
|
|
163
141
|
where 1=1
|
164
142
|
|
6
「試したこと」を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -218,7 +218,7 @@
|
|
218
218
|
|
219
219
|
ORA-00904: "NumOfEnrollEachCo"."TotalEnrollEachCourse": invalid identifier
|
220
220
|
|
221
|
-
00904
|
221
|
+
00904 00000 - "%s: invalid identifier"
|
222
222
|
|
223
223
|
*Cause:
|
224
224
|
|
@@ -242,7 +242,7 @@
|
|
242
242
|
|
243
243
|
ORA-00918: column ambiguously defined
|
244
244
|
|
245
|
-
00918
|
245
|
+
00918 00000 - "column ambiguously defined"
|
246
246
|
|
247
247
|
*Cause:
|
248
248
|
|
5
ソースを一部修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
1
|
8
8
|
|
9
|
-
|
9
|
+
DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
|
10
10
|
|
11
11
|

|
12
12
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
2
|
16
16
|
|
17
|
-
|
17
|
+
course: 大学の科目(Course)のコード(COURSE_NUMBER)と名前(COURSE_NAME)と科目の属している学部コード(OFFERING_DEPT)+その他
|
18
18
|
|
19
19
|

|
20
20
|
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
3
|
24
24
|
|
25
|
-
|
25
|
+
section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
|
26
26
|
|
27
27
|
***ここではセクション=各学期に開かれる講義と定義します。例えば、「数学1」という科目(Course)が2017年春と2017年秋に開かれたとき、それぞれの学期の講義を別々のセクションとして認識します。セクションが多、科目が一の関係です)。
|
28
28
|
|
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
4
|
34
34
|
|
35
|
-
|
35
|
+
GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)
|
36
36
|
|
37
37
|

|
38
38
|
|
4
プライバシーの観点から、一部内容を削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
以下の4つのテーブルがあります(画像では一部を表示しています。
|
3
|
+
以下の4つのテーブルがあります(画像では一部を表示しています。すべてのデータを共有したいのですが、プライバシーの都合上できません。ご必要の場合は直接連絡いただければと思います)。
|
4
|
-
|
5
|
-
)。
|
6
|
-
|
7
|
-
|
8
4
|
|
9
5
|
|
10
6
|
|
3
試したことを追加。タイトル変更。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
OracleSQL
|
1
|
+
OracleSQLのPIVOT関数を使って各科目(行)の成績分布(列)を表示し、かつそれらの数字の合計をカラムの一番右に追加したい。
|
test
CHANGED
@@ -232,6 +232,32 @@
|
|
232
232
|
|
233
233
|
|
234
234
|
|
235
|
+
0. Inline selectですでに取得したGradeの合計値を
|
236
|
+
|
237
|
+
,"NumOfStEachCo"."numOfStEachCo" as "TotalEnrollEachCourse"
|
238
|
+
|
239
|
+
と書いて外のSQLでも使えるようにすると、そのカラムが”A”カラムの左に来てしまう。
|
240
|
+
|
241
|
+
0. Inline selectですでに取得したGradeの合計値を
|
242
|
+
|
243
|
+
,"NumOfStEachCo"."numOfStEachCo" as "TotalEnroll"
|
244
|
+
|
245
|
+
と書いて外のSQLでも使えるようにすると、以下のエラーが発生する。
|
246
|
+
|
247
|
+
ORA-00918: column ambiguously defined
|
248
|
+
|
249
|
+
00918. 00000 - "column ambiguously defined"
|
250
|
+
|
251
|
+
*Cause:
|
252
|
+
|
253
|
+
*Action:
|
254
|
+
|
255
|
+
Error at Line: 4 Column: 5
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
|
260
|
+
|
235
261
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
236
262
|
|
237
263
|
Oracle 12c を使ってOracle Developer上で動かしています。
|
2
データファイルのリンク追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
以下の4つのテーブルがあります(画像では一部を表示しています。推定しているすべてのデータはExcelFile"dataForTeratail.xlsx"にまとめているのですが、ファイルを添付する方法がわかりません。。。今探しています)。
|
4
|
-
|
5
|
-
https://drive.google.com/file/d/0B1ahJBHhcbDLWVlmQzRFcnlZZVk/view?usp=sharing
|
3
|
+
以下の4つのテーブルがあります(画像では一部を表示しています。推定しているすべてのデータはこちらのリンクにまとめています: https://drive.google.com/file/d/0B1ahJBHhcbDLWVlmQzRFcnlZZVk/view?usp=sharing
|
4
|
+
|
5
|
+
)。
|
6
|
+
|
7
|
+
|
6
8
|
|
7
9
|
|
8
10
|
|
1
データファイルのリンクを追加(実験)
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
以下の4つのテーブルがあります(画像では一部を表示しています。推定しているすべてのデータはExcelFile"dataForTeratail.xlsx"にまとめているのですが、ファイルを添付する方法がわかりません。。。今探しています)。
|
4
4
|
|
5
|
+
https://drive.google.com/file/d/0B1ahJBHhcbDLWVlmQzRFcnlZZVk/view?usp=sharing
|
6
|
+
|
7
|
+
|
8
|
+
|
5
9
|
1
|
6
10
|
|
7
11
|
eb.DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
|