按子查询中的字段计数进行分组

时间:2013-01-21 15:41:56

标签: sql group-by

假设这些表格包含以下字段:

历史记录:

postID, viewerID

帖子:

postID, posterID

现在这个查询:

SELECT postID FROM history
WHERE postID IN (SELECT postID FROM Posts WHERE posterID IN (10,20,30)
AND viewerID=50

将从海报10,20&在图30中,观看者50已经观看过。

我所追求的是一个根据的“分组” 每个posterID的任何帖子的结果数量。

例如,当前描述的查询的结果可以具有

100,200,300,300,300,100,400, 700, 500

假设前7个结果来自海报10,最后2个来自海报20 - 所以我需要一个结果:

posterID   viewsNum
10         7
20         2

我的SQL级别是中级的,所以我不能立即明白如何实现这一目标, 抱歉,如果有一个隐藏在里面的“简单”答案:)

1 个答案:

答案 0 :(得分:3)

这里需要的只是一个GROUP BY,其函数为COUNT(),而JOIN代表两个表。类似的东西:

SELECT 
  PosterID, 
  COUNT(postID) viewsNum
FROM history h 
INNER JOIN Posts p ON h.postID = p.PostID
WHERE p.posterID IN (10,20,30)
  AND h.viewerID = 50
GROUP BY posterID