事先感谢您的帮助。我有一些表格,在这里找到它们:点击查看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
这给出了所有校友的AlumniID
和TotalDonation
。这里复制了BusinessID
,所以我可以将上面的查询与下面的查询合并成一个查询…
从这里,我对alumni表执行LEFT JOIN
,对BusinessSponsor表执行LEFT JOIN
,以获得结果列表。
我建议你进一步研究-
- 各种join类型及其特性
- NULL值以及如何检测和处理
- SUM and GROUP BY
如果你有任何问题或意见,请随时在下面留言。
谢谢。