我试图找到每个成员的积分数。两个相关表格为LESSON
和POINT
。我必须首先总结所购买的积分POINT.Point
,然后减去使用的总和点LESSON.LessonPoint
。这两个操作必须自然地使用GROUP BY MemberId
。
我最初尝试了以下查询,但它正在计算LESSON表中每条记录的SUM。例如,如果所购买的点数的真实总和等于10,并且每次获得5分,则结果将达到45.总和10,减去1点5次((10-1)* 5 = 45)。然而,追求的结果是5(购买10分减去5分)。 PIA =账户中的点数。
SELECT P1.MemberId,SUM(P1.Point)-SUM(L1.LessonPoint)AS PIA
FROM POINT P1 LEFT JOIN LESSON L1 ON P1.MemberId = L1.MemberID GROUP BY P1.MemberId
订购P1.MemberId DESC
我只想计算每个SUM一次,所以我需要某种子查询。然后我尝试了以下内容,但是我收到一条错误消息,说它没有识别出SLP。 SLP =课程积分总和。
SELECT P1.MemberId,SUM(P1.Point)-SLP AS PIA from POINT P1 FULL JOIN LESSON L1 ON P1.MemberId = L1.MemberId GROUP BY P1.MemberId WHERE P1.MemberId IN(SELECT SUM(L1.LessonPoint)AS SLP来自LESSON L1 GROUP 由L1.MemberId)
然后我试着解决问题。但是,以下结果与第一个查询类似,因为POINT.Point
的SUM计算了与LESSON.LessonPoint
对应的MemberId
中的每条记录。
SELECT P1.MemberId,SUM(P1.Point),SUM(L1.LessonPoint)FROM POINT P1 在L1.MemberId = P1.MemberId GROUP由L1.MemberId完全加入课程L1, P1.MemberId
我希望这个问题能够明确提出。我已经达到了我的知识和能力的极限,请帮忙。
答案 0 :(得分:0)
SELECT P1.MemberId, P1.p1sum -L1.l1sum as res_sum AS PIA
FROM (SELECT P1.MemberId, SUM(P1.Point) as p1sum FROM POINT P1 GROUP BY P1.MemberId) P1
JOIN (SELECT L1.MemberId, SUM(L1.LessonPoint) as l1sum FROM LESSON L1 GROUP BY L1.MemberId) L1
ON P1.MemberId= L1.MemberID
ORDER BY P1.MemberId DESC
只需计算子查询中的SUM并加入两个子查询
答案 1 :(得分:0)
;WITH CTE (MemberId,p1sum,l1sum) AS
(
SELECT P1.MemberId, SUM(P1.Point),SUM(L1.LessonPoint),L1.MemberId as p1sum FROM POINT P1
INNER JOIN LESSON L1
ON P1.MemberId= L1.MemberID
GROUP BY P1.MemberId
ORDER BY MemberId DESC
)
select MemberId, p1sum - l1sum as res_sum FROm CTE