Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 18:30   #1
Dawystrik
Пользователь
 
Аватар для Dawystrik
 
Регистрация: 22.10.2008
Сообщений: 32
Вопрос подзапросы

Помогите разобраться,а то я совсем запуталась
вот у меня дан запрос:Вывести список читателей,прочитавших в 2 раза больше книг,чем средний показатель.
Для того,чтобы было более понятно,у меня даны 3 таблицы,из которых выводиться запрос(таблицы в прикрепленых файлах)
Вот как я думаю надо пошагово сделать этот запрос:
1. Подсчитать количество сколько прочитал книг каждый читатель (взял приравнивается к прочитал);
2.Вывести среднее арифметическое прочитанных книг на одного читателя;
3.Вывести читателя(ей) у которого количество прочитанных книг больше в 2 раза чем среднеей арифметическое прочитанных книг на одного читателя;
Вот я вывела первый подзапрос:
Код:
SELECT id_readers,COUNT(N_BOOKS) AS kol
FROM READERS LEFT JOIN GIVEN_BOOKS ON
N_READERS=ID_READERS
GROUP BY id_READERS
;
А вот как остальные вывести я что-то не могу придумать,запуталась.
Помогите разобраться.
Заранее благодарю.
Вложения
Тип файла: rar Таблицы.rar (261.5 Кб, 7 просмотров)
Dawystrik вне форума Ответить с цитированием
Старый 25.09.2009, 19:49   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

что означает?
Цитата:
Вывести список читателей,прочитавших в 2 раза больше книг,чем средний показатель.
означает ли это, что прочитать нужно ровно в 2 раза больше или можно и более чем в 2 раза?
короче знак сами установите

имхо запрос будет таким
Код:
select 
  r.id_readers,
  count(gb.n_books) as KOL
from readers r left join given_books gb on
       gb.n_readers = r.id_readers
group by r.ID_readers
having count(gb.n_books) >= (select 2 * avg(kol) 
                                          from (
                                                  select                                           
                                                        count(gb.n_books) as KOL
                                                  from readers r left join given_books gb on
                                                           gb.n_readers = r.id_readers
                                                  group by r.ID_readers
                                                   )
                                           )
все недостающие поля по читателям сами подтянете

апд
1) это все в оракле делается?
2) и зачем здесь использовать лефт_джойн? по идее если книжек не брал, то и в кол-ве читателей не участвует...
и тогда запрос можно переписать так
Код:
select 
  r.id_readers,
  count(gb.n_books) as KOL
from 
  readers r, 
  given_books gb
where 0=0
   and gb.n_readers = r.id_readers
group by r.ID_readers
having count(gb.n_books) >= (select 2 * avg(kol) 
                                          from (
                                                  select count(n_books) as KOL
                                                  from given_books
                                                  group by n_readers
                                                   )
                                           )

Последний раз редактировалось soleil@mmc; 25.09.2009 в 20:00.
soleil@mmc вне форума Ответить с цитированием
Старый 25.09.2009, 20:01   #3
Dawystrik
Пользователь
 
Аватар для Dawystrik
 
Регистрация: 22.10.2008
Сообщений: 32
По умолчанию

лефт_джойн нужно так как мы берем ведь средний показатель по всем читателям,а возможно я и ошибаюсь
Dawystrik вне форума Ответить с цитированием
Старый 25.09.2009, 20:14   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Dawystrik Посмотреть сообщение
лефт_джойн нужно так как мы берем ведь средний показатель по всем читателям,а возможно я и ошибаюсь
в принципе да
повлияет именно на средний показатель
т.е. если всего читателей 100, а "живых" читателей из них 50, то с джойном среднее кол-во книг будет в 2 раза меньше чем без джойна
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск