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 のすべての postID を返します。

私が求めているのは、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代わりに2つのテーブルがあります。何かのようなもの:

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 に答える