【问题标题】:SQL Unique Where and CountSQL 唯一位置和计数
【发布时间】:2014-06-14 19:24:09
【问题描述】:

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

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;同时显示所有结果,而不仅仅是特定的 ProjectID。我想查看我的所有 ProjectID、所有 ProjectName,以及每个项目收到的捐款数量。是否可以一次显示所有这些?

提前致谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你需要的是加入和分组:

    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
    

    【讨论】:

    • 我认为你应该有一个left join 来获取所有项目。
    • @GordonLinoff - 确实这不会有 0 个捐款的项目
    • 是的,我遇到的问题是我的 LEFT JOIN 没有使用 GROUP BY。我变得非常沮丧,这极大地帮助了我。谢谢!我一直在阅读 SQL,其中一些手册让我非常困惑,这就是为什么我最终导致在这里询问。
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多