SQL唯一的位置和计数

时间:2014-06-14 19:24:09

标签: sql oracle

我可能会问这个问题是错的,这是我问题的一部分,但是:

Project_Table上的列:

ProjectID, ProjectName, StartDate, EndDate, Coordinator

Donation_Table上的专栏:

DonationID, DonationAMT, DonationDate, ProjectID

所以,我正在尝试计算每个项目已经做出多少承诺。

所需的输出将是:

ProjectId, ProjectName, #ofPledges

我可以通过以下方式获得具体计数:

SELECT count(ProjectID) FROM Donation_Table where ProjectID = 1;

但是我正在努力让ProjectName显示出来,这来自我的Project_Table;同时显示所有结果,而不仅仅是SPECIFIC ProjectID。我希望看到我的所有ProjectID,所有项目名称,然后是每个项目收到的捐赠数量。是否可以一次显示所有这些?

提前致谢!

2 个答案:

答案 0 :(得分:2)

您需要加入和分组:

SELECT P.ProjectID, P.ProjectName, Count(DonationID)
FROM Project_Table P
JOIN Donation_Table D ON P.ProjectID = D.ProjectID
GROUP BY P.ProjectID, P.ProjectName

这是一个简单的东西,可能需要在stackoverflow上提出问题。我建议阅读有关如何使用SQL的内容 - 任何体面的书或文章都将在前几章中介绍这一点。

注意如果你想看到零捐赠物品,你需要一个左连接:

SELECT P.ProjectID, P.ProjectName, Count(DonationID)
FROM Project_Table P
LEFT JOIN Donation_Table D ON P.ProjectID = D.ProjectID
GROUP BY P.ProjectID, P.ProjectName

答案 1 :(得分:0)

首先确定每个项目的捐赠数量:

SELECT ProjectID, count(*) 
FROM Donation_Table 
GROUP BY ProjectID

结果是一个可以与项目表一起加入的新表:

SELECT p.*, x.cnt
FROM Project_Table p
JOIN (
    SELECT ProjectID, count(*) as cnt 
    FROM Donation_Table 
    GROUP BY ProjectID
) X
    ON X.ProjectID = p.ProjectID