2016-09-04 60 views
1

単純なシナリオでデータ・ウェアハウス・エクササイズを扱うユニ・ワークでいくつかの改訂を行いました。データ・ウェアハウスは生徒は、異なる期間、学期および専攻に基づいてコンピュータラボを使用します。参考として 、我々のデータウェアハウスがある4元のテーブルから構築されています:'SQLで単一のグループ・グループ関数ではありません'エラー

  • USELOG(log_date、log_time、STUDENT_ID、アクト)パート/フル
  • 学生(STUDENT_ID、セックス、タイプ、CLASS_ID、 Major_Code)
  • メジャー(Major_name、Major_code)メジャー(Major_name、Major_code)
  • クラス(Class_description、CLASS_ID)

私は2つのエラー、私は(私が思う)から回避し、別の1であるものを得ます私は先生の解答を持っているので、私はうまくいかないようなグループであり、私たちは同様のグループ分けをしていますが、私はその仕事をどのようにして行ったかについては何か違うと思います。次のように

とにかく、私のコードは次のとおりです。

Create table Period_DIM (
PeriodID number, 
PeriodDesc varchar2(15), 
begin_time date, 
end_time date); 

Create Table Semester_DIM(
SemesterID number, 
Semester_Desc varchar2(15), 
start_date date, 
end_date date); 

Create Table Major_DIM as Select * from major; 

Create Table class_dim as select * from class; 

--Populate Period_Dim 
Insert Into Period_DIM Values(1, 'Morning', To_date('06:01', 'HH24:MI'), To_date('12:00', 'HH24:MI')); 
Insert Into Period_DIM Values(2, 'Afternoon', To_date('12:01', 'HH24:MI'), To_date('18:00', 'HH24:MI')); 
Insert Into Period_DIM Values(3, 'Evening', To_date('18:01', 'HH24:MI'), To_date('06:00', 'HH24:MI')); 

--Populate Semester_DIM 
Insert Into Semester_DIM Values (1, 'Semester 1', To_date('01-Jan', 'DD-MON'), To_date('15-JUL', 'DD-MON')); 
Insert Into Semester_DIM Values (2, 'Semester 2', To_date('16-Jul', 'DD-MON'), To_date('31-DEC', 'DD-MON')); 

--Create Temp Fact Table 
Create table tempfacttable As Select u.LOG_DATE, u.LOG_TIME, u.STUDENT_ID, s.CLASS_ID, s.MAJOR_CODE 
From Uselog u, student s 
where u.STUDENT_ID = s.STUDENT_ID; 

--Add a timeID to each row in the table because the data doesn't originally have them 
alter table tempfacttable add (timeid number); 
update tempfacttable 
set timeid = 1 
where to_char(log_time, 'HH24:MI') >= '06:01' 
and to_char(log_time, 'HH24:MI') <= '12:00'; 

update tempfacttable 
set timeid = 2 
where to_char(log_time, 'HH24:MI') >= '12:01' 
and to_char(log_time, 'HH24:MI') <= '18:00'; 

--Use OR in this case 
update tempfacttable 
set timeid = 3 
where to_char(log_time, 'HH24:MI') >= '18:00'or to_char (log_time, 'HH24:MI') <= '06:00'; 

--Add a semester ID based on the date in the tempfact cause its not contained in the Dimensions 
alter table tempfacttable add (semid varchar2(10)); 
update tempfacttable 
set semid= 'S1' 
where to_char(log_date, 'MMDD') >= '0101' 
and to_char(log_date, 'MMDD') <= '0715'; 

update tempfacttable 
set semid = 'S2' 
where to_char(log_date, 'MMDD') >= '0716' 
and to_char(log_date, 'MMDD') <= '1231'; 

--Create the Fact Table 
Create table factTable as 
select t.SEMID, t.TIMEID, t.MAJOR_CODE, t.CLASS_ID, count(t.student_id) as total_usage 
From tempfacttable t 
group by t.semid, t.timeid, t.class_id, t.major_code; 

select total_usage from tempfacttable; --returns error saying total_usage is an invalid operator 

--Usage for time period by major and by student's class 
--Select t.timeid, p.perioddesc, m.major_code, m.major_name, c.class_id, c.class_description, sum(t.total_usage) as usage_numbers 
--Previous line returns error because of t.total_usage, workaround is in the next line 
Select t.timeid, p.PERIODDESC, m.MAJOR_CODE, m.MAJOR_NAME, c.CLASS_ID, c.CLASS_DESCRIPTION, sum(count(t.student_id)) as usage_numbers 
from tempfacttable t, period_dim p, class_dim c, major_dim m 
where t.timeid = p.PERIODID 
and t.major_code = m.major_code 
group by t.timeid, p.PERIODDESC, t.major_code, m.major_name, t.class_id, c.class_description; 

私はそれが働くように見えることはできません、私はその「ではない単一のグループグループ機能」を示すエラーを取得します。私は本当にこれといくつかの助けとtotal_usageを参照することができない理由については、私はそれを含むテーブルから*を選択した場合でも、それは残りの属性で表示されますにも感謝します。ありがとうございました

+1

だけが目を贅沢下であなたの 'SELECT'文を...あなたの' GROUP BY'文が探しています't.major_code'(t)では' m.MAJOR_CODE'(m)を選択しています。私はあなたが同じでなければならないという条項を持っていることを知っています - しかし、あなたは一般にあなたが '選択している 'データを' GROUP'したいと思っています。それがオラクルが動揺しているのかどうか疑問に思っていますか? – doublesidedstickytape

答えて

1

tempfacttableの中にtotal_usageの列が定義されていないと思います。ただし、

が代わりにこれを試してみてください、あなたのfactTableテーブル内の列total_usageを持っています:

select total_usage from factTable; 
関連する問題