代码之家  ›  专栏  ›  技术社区  ›  sean717

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

sql
  •  2
  • sean717  · 技术社区  · 14 年前

    我有两张表:

    Person {PersonId, FirstName, LastName,Age .... } 
    Photo {PhotoId,PersonId, Size, Path}
    

    显然,photo表中的personid是引用person表的fk。

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

    结果的一行看起来像

    24|Ryan|Smith|28|6

    如何在TSQL中编写这样的查询?

    谢谢,

    5 回复  |  直到 11 年前
        1
  •  3
  •   Shannon Severance    14 年前

    为了避免重复来自的所有列,您需要一个子查询。 Person 在您的group by子句中。

    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 
    
        2
  •  2
  •   JonH    14 年前
        SELECT 
           p.PersonId, 
           p.FirstName, 
           p.LastName, 
           p.Age,
           CASE WHEN 
                t.ThePhotoCount IS NULL THEN 0 ELSE t.ThePhotoCount END AS TheCount
           --the above line could also use COALESCE
       FROM 
           Person p 
       LEFT JOIN
             (SELECT 
                 PersonId,
                 COUNT(*)  As ThePhotoCount
             FROM 
                 Photo 
             GROUP BY PersonId) t
        ON t.PersonId = p.PersonID
    
        3
  •  1
  •   Martin Smith    14 年前
    SELECT P.PersonId, FirstName, LastName,Age, COUNT(PhotoId) AS Num
    FROM Person P 
         LEFT OUTER JOIN PHOTO PH ON P.PersonId =  PH.PersonId
    GROUP BY P.PersonId, FirstName, LastName,Age
    
        4
  •  0
  •   Jesse Dhillon    14 年前
    select Person.*, count(PhotoId) from Person left join Photo on Person.PersonId = Photo.PersonId
    
        5
  •  0
  •   Ian Holing    11 年前

    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