SQL:从2个不同的表中减去SUM

时间:2014-03-26 05:55:20

标签: sql sql-server

我试图找到每个成员的积分数。两个相关表格为LESSONPOINT。我必须首先总结所购买的积分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

我希望这个问题能够明确提出。我已经达到了我的知识和能力的极限,请帮忙。

2 个答案:

答案 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