2016-12-06 2 views
0

私はこのような状況で、私はSQLクエリを作成できません。これで私を助けてください。 reqiuredJOINできず、最終的なクエリを取得することができません。

create table student(
    studentName varchar(50) 
); 

Insert into student values('abc'); 
Insert into student values('mnop'); 
Insert into student values('xyz'); 
Insert into student values('pqrs'); 

create table workAssigned (
    topic varchar(50), 
    creator varchar(50), 
    reviewer varchar(50), 
    creationCount decimal(4,2) 
    reviewCount decimal(4,2) 
); 

insert into workAssigned values('algebra','abc','mnop',1.25,0.75); 
insert into workAssigned values('geometry','mnop','xyz',1.5,0.25); 
insert into workAssigned values('algorithms','mnop','xyz',1.5,1.5); 
insert into workAssigned values('derivative','xyz','abc',0.25,1); 

最終的な出力は次のようになります。

StudentName NumberOfWorkDone Effort 
abc     2   2.25     
mnop     3   3.75 
xyz     3    2 
pqrs     NUll   NULL 

NumberOfWorkDoneは、作成者とレビューのSUMで、 努力がcreationCountとreviewCountのSUM

+2

ヒント: 'JOIN'、' GROUP BY'。 –

答えて

1
Select studentName,NumberOfWorkDone,Effort 
From student as A 
Left Join 
(
    Select creator,count(creator) as NumberOfWorkDone,sum(creationCount) as Effort 
    From 
    (
     Select creator,creationCount 
     from workAssigned as A 
     Union all 
     Select reviewer,reviewCount from workAssigned 
    )as A 
    Group by creator 
)as B 
On A.studentName=B.creator 
0
select * from 
(select count(col_X) as F, col_X 
    from 
(select creator as col_X from workAssigned 
    UNION ALL 
select reviewer as col_X from workAssigned) AS A 
    group by col_X) as E 
left join 
(select A, sum(B) 
    from 
(select creator as A, creationCount as B 
    from workAssigned 
    UNION ALL 
    select revieweras A, reviewCount as B 
    from workAssigned) as C 
    group by A) as D 
on E.F = D.A 
2

であるあなたがGroup Byを使用して試すことができ、 JoinおよびCASEAggregate functions

SELECT studentName, 
SUM(CASE WHEN W.creator = S.studentName OR S.studentName = W.reviewer THEN 1 ELSE NULL END) AS NumberOfWorkDone, 
SUM(CASE WHEN W.creator = S.studentName THEN W.creationCount WHEN S.studentName = W.reviewer THEN W.REVIEWCOUNT ELSE NULL END) AS Efforts 
FROM student S 
LEFT JOIN workAssigned W 
ON S.studentName = W.creator OR S.studentName = W.reviewer 
GROUP BY studentName 

あなたの出力はNULLを見せていたとして、私は他の部分のCaseステートメントにNULLを追加しているが、私はあなたが0でそれを置き換えるならば、それは良いだろうと思います。

関連する問題