【问题标题】:SQL: How to select a count of multiple records from one table, based on records in a different table?SQL:如何根据不同表中的记录从一个表中选择多个记录的计数?
【发布时间】:2011-10-31 00:48:19
【问题描述】:

假设我有两张桌子:

表 A

消息ID |留言

1 |你好
2 |你好

等等。

表 B

评论ID |消息ID |评论

1 | 2 |这是对说 Bonjour 的人的评论
2 | 2 |这是对 Bonjour 的另一条评论

我要做的是运行一个查询,该查询从表 A 中提取所有记录(“消息”)以及表 B 中每条消息的所有 cmets 的计数。

结果是:

你好 - 0 cmets
Bonjour - 2 厘米

我知道这可能是使用连接与计数(*)的某种组合,但我似乎无法找到正确的语法。

有什么想法吗?

【问题讨论】:

  • 感谢大家的帮助。这有效:SELECT *, count(commentID) as commentcount FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID GROUP BY message 但是....我将如何从 TableA 中获取 ALL 记录,而只需从 TableB 中添加一个评论计数?当我尝试从 TableA 中选择 * 时,我得到一个 MSSQL“列 'tableA.messageID' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中”错误。
  • 对不起,上面应该是SELECT message, count(commentID) as commentcount FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID GROUP BY message 使用 * 会给我错误。

标签: sql sql-server database join count


【解决方案1】:

试试这个:

SELECT a.MessageID, COUNT(*)
FROM TABLEA a
JOIN TABlEB b
ON b.MessageID = a.MessageID
GROUP BY a.MessageID

【讨论】:

    【解决方案2】:

    类似这样的:

    SELECT MessageID, COUNT(CommentID)
    FROM "TABLE B"
    GROUP BY MessageID
    

    如果除了 MessageID 之外你还需要 Message,你应该可以这样做:

    SELECT MessageID, MIN(Message), COUNT(CommentID)
    FROM "TABLE A" LEFT JOIN "TABLE B" USING (MessageID)
    GROUP BY MessageID
    

    (Oracle 语法,可能与 MSSQL 相同)

    【讨论】:

      【解决方案3】:

      对于基于消息的方法:

      SELECT message, count(commentID) 
      FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID 
      GROUP BY message
      

      您需要 LEFT JOIN 来包含表 A 中没有表 B 中任何 cmets 的记录。

      【讨论】:

      • 这行得通:SELECT message, count(commentID) as commentcount FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID GROUP BY message 但我将如何从 tableA 中获取 所有 记录以及从 tableB 中获取计数?
      【解决方案4】:

      只是对已发布内容的补充,如果您将其用于脚本语言,您可能需要 SELECT 列表中所有内容的命名列:

      SELECT tableA.messageID, message, count(commentID) AS commentCount
      FROM tableA LEFT JOIN tableB ON tableA.messageID = tableB.messageID 
      GROUP BY message
      

      【讨论】:

        猜你喜欢
        • 2012-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多