Sql 如何编写此查询以显示包含其他字段的计数

Sql 如何编写此查询以显示包含其他字段的计数,sql,Sql,我有以下两个表格: Person {PersonId, FirstName, LastName,Age .... } Photo {PhotoId,PersonId, Size, Path} 显然,照片表中的PersonId是引用Person表的FK 我想写一个查询来显示一个人的所有字段,以及他/她在照片表中的照片数量 一行结果如下所示 24 |瑞安|史密斯| 28 | 6 如何在tsql中编写这样的查询 谢谢,您需要一个子查询,以避免重复GroupBy子句中Person的所有列 selec

我有以下两个表格:

Person {PersonId, FirstName, LastName,Age .... } 
Photo {PhotoId,PersonId, Size, Path}
显然,照片表中的PersonId是引用Person表的FK

我想写一个查询来显示一个人的所有字段,以及他/她在照片表中的照片数量

一行结果如下所示

24 |瑞安|史密斯| 28 | 6

如何在tsql中编写这样的查询


谢谢,

您需要一个子查询,以避免重复GroupBy子句中Person的所有列

select Person.*, count(PhotoId) from Person left join Photo on Person.PersonId = Photo.PersonId
SELECT
  p.PersonId,
  p.FirstName,
  p.LastName,
  p.Age,
  coalesce(ph.PhotoCount, 0) as Photocount
FROM
  Person p
  LEFT OUTER JOIN 
     (SELECT PersonId, 
      COUNT(PhotoId) as PhotoCount 
      FROM Photo 
      GROUP BY PersonId) ph
  ON p.PersonId = ph.PersonId 

IMO GROUP BY应该是解决方案,即使使用其他表联接,这种方法也适用于我:

SELECT meetings.id, meetings.location, meetings.date, COUNT( users.id ) AS attendees
FROM  `meetings`
LEFT JOIN users ON meetings.id = users.meeting_id
WHERE meetings.moderator_id =  'XXX'
GROUP BY meetings.id

-1您未正确使用分组方式。为什么要按所有这些字段进行分组?您只需按PersonID分组即可。你的理由是什么。你应该重写它。@john-LOL!我想你只使用过MySQL,而不是需要标准SQL的产品吧?你有什么有力的理由不应该在这里使用左连接吗?这也是我所拥有的,但是如果Person表有十几个字段呢?将所有字段添加到GROUPBY子句是个好主意吗?还有别的办法吗?谢谢@sean717——绝对不是一个好主意,@Martin Smith应该停止闲逛,学习如何正确编写SQL语句。Group by被错误地使用,这就是为什么一些人有-1答案的原因。如果你发现自己像@Martin Smith那样被大量列分组,你可以假设你做了一些不正确的事情。请看我的答案以获取帮助。@john-在标准SQL中,如果您有一个组,那么“选择”列表中只允许按列、聚合或文本进行分组。非常基本的东西。-1在派生表t中没有PersonID字段,但您正在加入它。语法错误。@Martin Smith-请正确阅读问题,表格照片中有一个人,只需将其包括在内即可。绝对不值得否定一个正确的答案。在否决投票时,答案是不正确的。“现在是我撤销了它。”马丁·史密斯——这显示了你的勇气。谢谢@Martin Smith。这就是我在11分钟前发布的解决方案的作用。向@Martin Smith@john解释一下,你的查询在@Martin发表评论的时候是不起作用的,现在,它没有在结果中包含计数。
SELECT
  p.PersonId,
  p.FirstName,
  p.LastName,
  p.Age,
  coalesce(ph.PhotoCount, 0) as Photocount
FROM
  Person p
  LEFT OUTER JOIN 
     (SELECT PersonId, 
      COUNT(PhotoId) as PhotoCount 
      FROM Photo 
      GROUP BY PersonId) ph
  ON p.PersonId = ph.PersonId 
SELECT meetings.id, meetings.location, meetings.date, COUNT( users.id ) AS attendees
FROM  `meetings`
LEFT JOIN users ON meetings.id = users.meeting_id
WHERE meetings.moderator_id =  'XXX'
GROUP BY meetings.id