【问题标题】:Returning Count from database table joined with another table从与另一个表连接的数据库表中返回计数
【发布时间】:2023-03-12 11:37:01
【问题描述】:

我有两张桌子

标题

ID Name
1  'Title 1'
2  'Title 2'
3  'Title 3'

评论

ID TitleID Comment
1   1       'Title 1 Comment #1'
2   1       'Title 1 Commnet #2'
3   2       'Title 2 comment'

我想要一个记录集,它返回 Titles 中的所有标题以及该标题的 cmets 数量,因此

 Name    # Comments
 Title 1     2
 Title 2     1
 Title 3     0

我想出了如何返回所有标题和每条评论,但我很难返回只有 cmets 计数的数据。 (我的查询如下)

SELECT T.ID, T.Name, C.Comment
FROM Titles T
LEFT OUTER JOIN Comments C ON T.ID = C.TitleID
  UNION
SELECT T.TitleID, T.Name, C.Comment
FROM Titles T
RIGHT OUTER JOIN Comments C ON T.ID = C.TitleID

任何帮助将不胜感激。

更新

我忘了我也想返回没有 cmets 的标题。我更新了上面的例子。

【问题讨论】:

    标签: sql join count


    【解决方案1】:
    SELECT t.Name as Title, COUNT(c.ID) as NumberOfComments
    FROM Titles t
    LEFT JOIN Comments c ON c.TitleID = t.ID
    GROUP BY t.Name
    

    理想情况下,您希望按 TitleID 进行分组,但您也必须将其包含在您的选择中。如果您能够忽略该列(或使用它),那么我会使用它而不是 t.Name(或与 t.Name 一起使用)。

    【讨论】:

    • 我还想返回没有 cmets 的标题(请参阅问题中的更新)。
    • 这应该仍然有效。如果没有,请将 COUNT(c.ID) 更改为 COUNT(*)
    【解决方案2】:

    也可以通过子选择来完成。

    Select T.Name,
           (Select Count(*)From Comments C Where C.TitleID=T.ID)As NumComments
      From Titles T
    

    优点是不需要 GROUP BY。如果您的真实数据中的表的列比上面的示例多得多,这可能很重要。

    【讨论】:

    • 我认为你的意思是 C.TitleID = T.ID 在子选择中。
    【解决方案3】:
    SELECT title.name, count(comments.comment) as NumComments
    FROM titles,comments
    WHERE title.id = comment.titleID
    Group By title.name
    

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 2020-09-24
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多