0

次の表があります。

レビュー ID | Author_id | 投稿時間
--------------------------------------
R1 | U1 | ...
R2 | U2
R3 | U2
R9 | U7
R11 | U7
R12 | U7
R13 | U8
R14 | U10

私の質問は、U7 を入手したいというものです。私は次のようにしてみました:

 select author_id 
 from posted_reviews_tab 
 group by author_id
 having (count(author_id)) in (
        select max(count(author_id)) 
        from posted_reviews_tab   
        where reviewid in ( 
             select w.reviews.reviewid 
             from wall_tab w  
             where w.shopid = 'S9' 
        ) 
        group by author_id
);    

shop s9 のウォールには、R11、R12、R13、R14 の 4 件のレビューがあります。上の表は、どのユーザーがどのレビューを投稿したかを示しています。壁のテーブルから、どのお店の壁にどのレビューが書かれているかが分かります。したがって、すべてのレビューを取得したら、最も多くのレビューを投稿したユーザー (U7) を見つけたいと思います。上記のクエリでは、最大カウントが 2 であるため、U2 が返されます (2 becoz u7 post R11 および R12 )回避策を提案しますか?

4

2 に答える 2

0

これで U7 になりますが、結果を特定のショップに限定するという要件を理解しているかどうかはわかりません。

select author_id,
       cnt
from (
   select author_id, 
          count(*) cnt,
          rank() over (order by count(*) desc) as rnk
   from posted_reviews_tab
   group by author_id
) t
where rnk = 1;

SQLFiddle の例: http://sqlfiddle.com/#!4/52d62/1

于 2013-06-12T19:34:23.267 に答える