0

假设这些表带有这些字段:

历史:

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 已查看的所有 postIDS。

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

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

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

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

posterID   viewsNum
10         7
20         2

我的 SQL 级别是中级的,所以我还不清楚如何实现这一点,如果里面隐藏着一个“简单”的答案,对不起:)

4

1 回答 1

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
于 2013-01-21T15:43:52.033 回答