加入(Oracle SQL)和总和麻烦

时间:2015-10-24 05:21:30

标签: sql oracle join sum

提前感谢您的帮助。我有很多表,在这里找到它们:Click for image of ERD

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

我必须列出捐赠总金额超过25,000美元的所有商业赞助商(BusinessID和AlumniID)。结果必须按捐赠总金额的降序排序。

如果有帮助,我会截取DESC查询校友,捐赠和BusinessSponser的截图结果:DESC QUERIES

我真的不确定如何继续前进,非常感谢任何帮助。再次感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

...试

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

这为所有校友提供了AlumniIDTotalDonationBusinessID已在此处转载,因此我可以将上述查询与以下查询合并,以形成一个查询...

从这里开始,我使用Alumnus表执行LEFT JOIN,使用BusinessSponsor表执行另一个LEFT JOIN以获取结果列表。

我建议你进一步研究 -

  • 各种类型的JOINS及其特点
  • NULL值以及如何检测和处理它们
  • SUM和GROUP BY

如果您有任何问题或意见,请随时在下面发帖。

谢谢。