質問編集履歴

8

プライバシーの観点から、一部コードを削除

2017/10/22 08:00

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

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
- ![イメージ説明](3ad496f27a76d8ef6212558de113f004.png)
12
-
13
11
 
14
12
 
15
13
  2
16
14
 
17
- course: 大学の科目(Course)のコード(COURSE_NUMBER)と名前(COURSE_NAME)と科目の属している学部コード(OFFERING_DEPT)+その他
15
+ Course大学の講義のコードと講義を持つ
18
16
 
19
- ![イメジ説明](aede456b8c2145a7f1dc3c49a05dab1f.png)
17
+ 科目コド、コース名
20
18
 
21
19
 
22
20
 
23
21
  3
24
22
 
25
- section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
23
+ Section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
26
24
 
27
25
  ***ここではセクション=各学期に開かれる講義と定義します。例えば、「数学1」という科目(Course)が2017年春と2017年秋に開かれたとき、それぞれの学期の講義を別々のセクションとして認識します。セクションが多、科目が一の関係です)。
28
-
29
- ![イメージ説明](dc850902a5de834bc2517b804c5bc494.png)
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
- ![イメージ説明](1b48b809e8d77150dedc8e7d0526b187.png)
38
32
 
39
33
 
40
34
 
@@ -42,7 +36,17 @@
42
36
 
43
37
  以下のようなテーブルを作成したいです。
44
38
 
39
+ |学部名|科目コード|科目名|A|B|C|履修生徒数
40
+
41
+ |:--|:--:|--:|
42
+
45
- ![イメージ説明](3b625958e95874d22f4675e0c7e0f4b7.png)
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, D, FはDesc、それ以外はAcsです)。
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
- 自分でいろいろ試してみて、とりあえず、カラムだけは目的のテーブルと同じものができました。ただ、ごらんのとおりPIVOTがうまくいかず、Gradeの値とその合計がとれていません
65
+ 自分でいろいろ試してみて、とりあえず、カラムだけは目的のテーブルと同じものができました。ただ、PIVOTがうまくいかず、Gradeの値とその合計がとれずすべ0になってしまいま
62
-
63
- ![イメージ説明](4fe5253793307c20266f5af605509800.png)
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
- ![イメージ説明](3f49422cad337ee935e3676302df4dc1.png)
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

プライバシーの観点から、「該当のソースコードを一部削除」

2017/10/22 08:00

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

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
- EB.GRADE_REPORT gr2
135
+ GRADE_REPORT gr2
158
-
136
+
159
- join EB.SECTION se2 on (gr2.SECTION_ID = se2.SECTION_ID)
137
+ join SECTION se2 on (gr2.SECTION_ID = se2.SECTION_ID)
160
-
138
+
161
- join EB.COURSE co2 on (se2.COURSE_NUM = co2.COURSE_NUMBER)
139
+ join COURSE co2 on (se2.COURSE_NUM = co2.COURSE_NUMBER)
162
140
 
163
141
  where 1=1
164
142
 

6

「試したこと」を修正

2017/10/21 18:23

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

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. 00000 - "%s: invalid identifier"
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. 00000 - "column ambiguously defined"
245
+ 00918 00000 - "column ambiguously defined"
246
246
 
247
247
  *Cause:
248
248
 

5

ソースを一部修正

2017/10/21 18:20

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  1
8
8
 
9
- eb.DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
9
+ DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
10
10
 
11
11
  ![イメージ説明](3ad496f27a76d8ef6212558de113f004.png)
12
12
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  2
16
16
 
17
- eb.course: 大学の科目(Course)のコード(COURSE_NUMBER)と名前(COURSE_NAME)と科目の属している学部コード(OFFERING_DEPT)+その他
17
+ course: 大学の科目(Course)のコード(COURSE_NUMBER)と名前(COURSE_NAME)と科目の属している学部コード(OFFERING_DEPT)+その他
18
18
 
19
19
  ![イメージ説明](aede456b8c2145a7f1dc3c49a05dab1f.png)
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  3
24
24
 
25
- eb.section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
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
- eb.GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)
35
+ GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)
36
36
 
37
37
  ![イメージ説明](1b48b809e8d77150dedc8e7d0526b187.png)
38
38
 

4

プライバシーの観点から、一部内容を削除

2017/10/21 02:50

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,6 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- 以下の4つのテーブルがあります(画像では一部を表示しています。推定しているすべてのデータはこちらリンクにまとめています: https://drive.google.com/file/d/0B1ahJBHhcbDLWVlmQzRFcnlZZVk/view?usp=sharing
3
+ 以下の4つのテーブルがあります(画像では一部を表示しています。すべてのデータを共有したいですが、プライバシーの都合上できせん。ご必要の場合は直接連絡いただければいます)。
4
-
5
- )。
6
-
7
-
8
4
 
9
5
 
10
6
 

3

試したことを追加。タイトル変更。

2017/10/21 02:49

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

test CHANGED
@@ -1 +1 @@
1
- OracleSQLPIVOT関数を使って各科目(行)の成績分布(列)を表示し、かつそれらの数字の合計をに追加したい。
1
+ OracleSQLPIVOT関数を使って各科目(行)の成績分布(列)を表示し、かつそれらの数字の合計をカラムの一番右に追加したい。
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

データファイルのリンク追加

2017/10/20 10:53

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

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

データファイルのリンクを追加(実験)

2017/10/20 09:57

投稿

Ryuichi_Yamamot
Ryuichi_Yamamot

スコア11

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)