2013-01-21 65 views
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 

將返回觀看者50已查看的海報10,20 & 30中的所有postIDS。

我所追求的是一個「group-by」,它將根據 每個posterID的任何帖子的結果數量。

例如,目前所描述查詢的結果可以有

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

比方說,前7個結果是從海報10和最後2是從海報20 - 所以我需要的結果:

posterID viewsNum 
10   7 
20   2 

我的SQL水平是中間,所以尚不清楚對我如何實現這一目標, 抱歉,如果有一個「簡單」的答案藏在裏面:)

回答

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 
+0

謝謝。我把你的SELECT中的第二個字段切換到COUNT(posterID)(因爲這是我需要的) - 並且它工作得很好。 我之前並不知道你可以把字段放在FROM中的表中(但是來自JOIN中的表) - 儘管它很有意義。 –