Выбор пользователей по общему количеству заявок - PullRequest
4 голосов
/ 06 февраля 2009

Я знаю, что это легко, но это сводит меня с ума ...

У меня есть таблица пользователей, таблица комментариев и таблица изображений.

Я хочу получить список 10 лучших пользователей на основе представленных материалов (общее количество их комментариев и представленных фотографий).

Вот и все.

Позор мне.


ОБНОВЛЕНИЕ: основано на ответе Эда.

вот мои настройки:

  • таблица пользователей (user_id, username)
  • таблица изображений (img_id, submitby_id = users.user_id)
  • таблица комментариев (id, submitby_id = users.user_id)

и окончательный запрос:

    select submittedby_id, sum(total)
from 
    (select submittedby_id, count(img_id) as total from    
          images group by submittedby_id 
     union 
     select submittedby_id, count(id) as total from 
          comments group by submittedby_id
    ) as x
 group by submittedby_id 
 order by sum(total) desc limit 10;

Ответы [ 3 ]

5 голосов
/ 06 февраля 2009

Может быть, что-то вроде этого:

select username, sum(submissions) 
from 
    (select username, count(picture_id) from    
          pictures group by username 
     union 
     select username, count(comment_id) from 
          comments group by username
    )
 group by username 
 order by sum(submissions) desc limit 10;

К обзору концептуально:

  1. Считать представления пользователя в каждой таблице
  2. Объедините их, поэтому у каждого пользователя будет от 0 до 2 отсчетов от подзапроса.
  3. Сгруппируйте еще раз, суммируя два счета, а затем упорядочите так, чтобы наибольшая сумма оказалась сверху.

Надеюсь, это поможет.

2 голосов
/ 06 февраля 2009

psuedocode, конечно, но вы хотите что-то вроде этого:

select 
  u.userid
, count(commentID) + count(photoID) as totalsubmissions 
from users u
left outer 
    join comments c
    on u.userid = c.userid 
left outer 
    join pictures p 
    on u.userid = p.userid 
group by 
    u.userid 
order by 2 desc 
fetch first 10 rows only
0 голосов
/ 06 февраля 2009

Тонкий ответ Эда:

select submittedby_id, sum(submissions) 
from 
    (select submittedby_id, count(img_id) as submissions from    
          images group by submittedby_id 
     union all
     select submittedby_id, count(id) as submissions from 
          comments group by submittedby_id
    ) as x
 group by submittedby_id 
 order by sum(submissions) desc limit 10

Я полагаю, что вы хотите объединить все здесь, просто объединение может опустить записи, которые выглядят одинаково (одинаковые идентификатор и количество отправлений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...