SQL 获取具有相同 id 的所有行的计数

Posted

技术标签:

【中文标题】SQL 获取具有相同 id 的所有行的计数【英文标题】:SQL get count of all rows that have the same id 【发布时间】:2016-07-21 14:35:22 【问题描述】:

我有一个名为story_comment 的表,其中包含(整数)列story_id 和comment_id。我想知道每个故事有多少个 cmets,但我不确定编写 sql 查询的最佳方法。

查询应返回一个包含story_id 和num_cmets 列的表(其中num_cmets 是story_comment 中的行数,其中story_id 与该结果行中的story_id 相同)。

期望的结果(示例):

story_id | num_cmets

   4  |            17
   6  |             0
   7  |             4

我可以通过以下查询为一个特定的 story_id 做到这一点:

SELECT story_id, Count(story_id) as num_comments FROM story_comment where story_id=20;

但我不确定如何为表中的每个story_id 执行此操作。旁注我将在 php 中使用 mysqli 进行此查询。

【问题讨论】:

【参考方案1】:

使用GROUP BY

SELECT story_id, Count(story_id) as num_comments FROM story_comment  
GROUP BY story_id

GROUP BY 语句与聚合结合使用 按一列或多列对结果集进行分组的函数。

【讨论】:

谢谢!正是我需要的。 很高兴能提供帮助【参考方案2】:

要使 count() 等聚合函数应用于列的每个唯一值而不是完整表,请添加 group by

SELECT story_id, Count(*) as num_comments 
FROM story_comment
group by story_id

【讨论】:

感谢您的快速回复,这正是我所需要的!

以上是关于SQL 获取具有相同 id 的所有行的计数的主要内容,如果未能解决你的问题,请参考以下文章

获取 Table SQL 中相同字段的计数

获取每秒所有已开始但尚未完成的行的运行计数和值的总和

获取计数行的最后一个实例

从没有行的计数中获取 0 值

具有子句mysql的嵌套计数?

联接表并获取特定记录的计数