2013-06-12 2 views
0

У меня есть следующая таблица:запросов с помощью группы по SQL в

 
ReviewID | Author_id | Posted time 
------------------------------------- 
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 
);  

магазин s9 имеет 4 отзыва R11, R12, R13, R14 на своей стене. В приведенной выше таблице показано, какой пользователь опубликовал этот обзор. Из моего стенного стола я узнаю, в каком магазине есть все отзывы, написанные на его стене. Итак, как только я получу все отзывы, я хочу узнать пользователя, разместившего наибольшее количество отзывов (что является U7) Выше запрос дает мне U2, так как максимальное количество равно 2. (2 becoz u7 post R11 и R12) Can кто-нибудь предлагает обходной путь?

+0

почему вы использовали 'MAX (COUNT (AUTHOR_ID))' ?? Не имеет для меня никакого смысла. – TechBytes

+1

Итак, что именно вы хотите на английском? Вы просто хотите, чтобы authorID с наибольшим количеством отзывов от shopID s9? или что? – Scotch

+0

Да, автор ID пользователя, который отправил большинство отзывов от shopID s9. – Margi

ответ

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

+0

Это похоже на решение. Не знал о ранге(). Благодарю. – Margi

0

Насколько я undeerstood вопрос, это то, что вы хотите ..

select author_id from posted_reviews_tab group by author_id 
having (count(author_id)) in (

select max(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 
); 
+0

'count (author_id) in (select max (author_id) ...)' не будет работать, поскольку 'max (author_id)' возвращает ''U10'', который нельзя сравнить с числовым значением. –

Смежные вопросы