【问题标题】:SQL: Subtracting SUMs from 2 different tablesSQL:从 2 个不同的表中减去 SUM
【发布时间】:2014-05-04 08:38:49
【问题描述】:

我试图找出每个成员的积分数量。两个相关表是LESSONPOINT。我必须先将购买的积分相加,POINT.Point,然后减去使用的积分,LESSON.LessonPoint。这两个操作自然必须使用GROUP BY MemberId

我最初尝试了以下查询,但它正在计算 LESSON 表中每条记录的 SUM。例如,如果购买的实际积分总和等于 10,并且上过 5 节课,每节课 1 分,结果将是 45。总和 10 减去 1 点 5 倍 ((10-1)*5 =45)。但是,追求的结果是 5(买了 10 点减去使用了 5 点)。 PIA = 入账。

选择 P1.MemberId,SUM(P1.Point)-SUM(L1.LessonPoint) 作为 PIA
从 P1 点左加入课程 L1 在 P1.MemberId= L1.MemberID 按 P1.MemberId 分组
ORDER BY P1.MemberId DESC

我只想计算每个 SUM 一次,所以我需要某种子查询。然后我尝试了以下操作,但我收到一个错误,说它无法识别 SLP。 SLP = 课分总和。

SELECT P1.MemberId, SUM(P1.Point)-SLP AS PIA FROM POINT P1 FULL JOIN P1.MemberId=L1.MemberId 上的第 L1 课按 P1.MemberId 分组 WHERE P1.MemberId IN (SELECT SUM(L1.LessonPoint) 作为来自 LESSON L1 组的 SLP BY L1.MemberId)

然后我尝试解决问题。但是,下面给出的结果与第一个查询相似,因为 POINT.Point 的 SUM 是针对 LESSON.LessonPoint 中与 MemberId 对应的每条记录计算的。

从 P1 点选择 P1.MemberId、SUM(P1.Point)、SUM(L1.LessonPoint) L1.MemberId=P1.MemberId GROUP BY L1.MemberId 上的完整课程 L1, P1.MemberId

我希望这个问题得到了明确的表述。我已经达到了我的知识和能力的极限,请帮助。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    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 并加入两个子查询

    【讨论】:

    • 为了未来有类似问题的观众的利益,我调整了这个答案以考虑 NULL 值。这是新的第一行:SELECT ISNULL(L1.MemberId, P1.MemberId) AS MemberId, ISNULL(P1.p1sum,0) - ISNULL(L1.l1sum,0) as res_sum
    【解决方案2】:
    ;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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多