无法加入并获得最终查询

Unable to JOIN and get the final query

我遇到以下情况,无法形成 sql 查询。请帮我解决这个问题。

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

的总和
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

您可以尝试将 Group ByJoinCASEAggregate 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 添加到 else 部分的 Case 语句中,因为您的输出显示 NULL,但我认为如果将其替换为 0 会更好。

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