Joins (Oracle SQL) and Total Sum trouble



事先感谢您的帮助。我有一些表格,在这里找到它们:点击查看ERD图像

商业赞助者可以是企业,也可以是校友。这些商业赞助商可以捐款。这些捐赠可以是金钱,旅行补助等,但它们的价值以以下格式存储:$x,xxx在"捐赠"中的"价值"下。

我必须列出所有的商业赞助商(businessessid和AlumniID)谁已经捐赠了总金额大于$25,000价值。结果必须按照捐赠总额降序排列。

如果有帮助的话,我已经截屏了DESC对校友,捐赠和商业赞助商的查询结果:DESC查询

我真的不知道如何继续,任何帮助都是非常感激的。再次提前感谢。

SELECT A.AlumnID, SUM(D.Value)
FROM BusinessSponser B
JOIN Alumnus A
  ON B.AlumnID = A.AlumnID
JOIN Donation D
  ON D.BusinessID = B.BusinessID
GROUP BY A.AlumnID
UNION 
SELECT A.AlumnID, SUM(D.Value)
FROM Alumnus A
JOIN Donation D
  ON D.AlumnID = B.AlumnID 
GROUP BY A.AlumnID

Try…

SELECT A.AlumniID,
       B.FirstName,
       B.LastName,
       A.BusinessID,
       C.BusinessName
       A.TotalDonation
FROM ( SELECT AlumniID,
              BusinessID,
              SUM( Value ) AS TotalDonation
       FROM Donation
       WHERE AlumniID IS NOT NULL
       GROUP BY AlumniID
       UNION SELECT AlumniID,
                    BusinessID,
                    SUM( Value ) AS TotalDonation
             FROM Donation
             WHERE BusinessID IS NOT NULL
             GROUP BY BusinessID ) A
     LEFT JOIN Alumnus B
            ON A.AlumniID = B.AlumniID
     LEFT JOIN BusinessSponsor C
            ON A.BusinessID = C.BusinessID;

我从查询开始-

SELECT AlumniID,
       BusinessID,
       SUM( Value ) AS TotalDonation
FROM Donation
WHERE AlumniID IS NOT NULL
GROUP BY AlumniID

这给出了所有校友的AlumniIDTotalDonation。这里复制了BusinessID,所以我可以将上面的查询与下面的查询合并成一个查询…

从这里,我对alumni表执行LEFT JOIN,对BusinessSponsor表执行LEFT JOIN,以获得结果列表。

我建议你进一步研究-

  • 各种join类型及其特性
  • NULL值以及如何检测和处理
  • SUM and GROUP BY

如果你有任何问题或意见,请随时在下面留言。

谢谢。

最新更新