2015-10-14 4 views
0

пользователи будут записывать данные, используя следующие две таблицы:получения данных из нескольких таблиц и Объединение в Oracle

ПОЛЬЗОВАТЕЛЕЙ:

UserID UserName UserType 
    1 Tom  5 
    2 Mike 6 
    3 Joe  6 

Recordings:

UserID Recording 
    1 10 
    1 15 

I хотите использовать один запрос для поиска имени и количество записей, сделанных каждым пользователем, чей UserTy pe превышает среднее значение UserType. В случае, если пользователь никогда не записывал запись, он должен быть 0 (не нулевой или отсутствующий).

Мой подход заключается в том, чтобы сначала выбрать пользователей, которые превышают средний, второй, чтобы выбрать количество записей, сделанных каждым пользователем, и третье, чтобы присоединиться к двум, где совпадает идентификатор пользователя. Есть ли более прямой подход?

+0

1) выбрать пользователей, в которых количество записей> среднее количество записей в таблице или всего 2) выбрать пользователей, у которых число записей> среднее количество записей в его/ее группы. Который из них? –

ответ

1
SELECT usr.UserID 
     ,COUNT(rec.Recording) Count 
    FROM USers usr 
     ,Recordings rec 
     ,(SELECT AVG(UserType) average 
      FROM USers usr1) avg1 
WHERE usr.Userid = rec.userid(+) 
    AND avg1.average < usr.UserType 
GROUP BY usr.UserID 

Пожалуйста, проверьте это.

http://sqlfiddle.com/#!4/a03d2/5/0

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