涉及group by和join的SQL查询

Era*_*lpB 4 sql t-sql sql-server-2008

我不能在标题部分更具体,但我想为我做一些有点复杂的事情.我以为我做到了,但事实证明它是有缺陷的.

我有三个表如下:

ProjectTable

  • idProject
  • 标题
  • idOwner

OfferTable

  • idOffer
  • idProject
  • idAccount

AccountTable

  • idAccount
  • 用户名

现在在一个查询中,我的目标是列出所有项目,并提供最多的报价,在查询中我还想获得详细信息,如所有者的用户名,提供者的用户名*等等.所以我不必再次查询每个项目.

这是我的破解查询,这是我对GROUP BY的第一次实验,我可能没有完全理解它.

SELECT Project.addDate,Project.idOwner ,Account.Username,Project.idProject,
    Project.Price,COUNT(Project.idProject) as offercount 
FROM Project 
INNER JOIN Offer 
    ON Project.idProject= Offer.idProject 
INNER JOIN Account 
ON Account.idAccount = Project.idOwner  
GROUP BY Project.addDate,Project.idOwner,
    Account.Username,Project.idProject,Project.Price 
ORDER BY addDate DESC
Run Code Online (Sandbox Code Playgroud)

*:我写道,我没想到我只想提供示例额外信息,这要归功于Hosam Aly.

Mik*_*oud 7

试试这个(针对没有优惠的项目进行修改):

SELECT
  Project.addDate,
  Project.idOwner,
  Account.Username,
  Project.idProject,
  Project.Price,
  ISNULL(q.offercount, 0) AS offercount
FROM
  (
    SELECT
      o.idProject,
      COUNT(o.idProject) as offercount
    FROM Offer o
    GROUP BY o.idProject
  ) AS q
  RIGHT JOIN Project ON Project.idProject = q.idProject
  INNER JOIN Account ON Account.idAccount = Project.idOwner
ORDER BY addDate DESC
Run Code Online (Sandbox Code Playgroud)