假设这些表格包含以下字段:
历史记录:
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级别是中级的,所以我不能立即明白如何实现这一目标, 抱歉,如果有一个隐藏在里面的“简单”答案:)
答案 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