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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2022, 13:52   #1
dmmelg
Пользователь
 
Регистрация: 01.11.2021
Сообщений: 14
По умолчанию Написать sql запрос

Добрый день! Только начинаю учить sql, поэтому столкнулась с трудностью.
У меня пока появились мысли только по действиям. Как я понимаю, нужно обьединить таблицы книги и журнал выдачи с помощью inner join, потом вывести таблицу, которая получилась и после использовать count.( могу ошибаться). С практикой сложнее....Помогите пжл)
Изображения
Тип файла: jpg photo_2022-03-24_23-04-42.jpg (56.8 Кб, 4 просмотров)
dmmelg вне форума Ответить с цитированием
Старый 26.03.2022, 12:14   #2
Agency
Пользователь
 
Регистрация: 07.10.2017
Сообщений: 99
По умолчанию

Разбейте задачу на этапы, для каждого этапа напишите отдельный запрос, потом обобщите...
Например:
1) Получить из Журнала выдачи 10 максимально часто встречающихся строк ID_book - можно делать разными способами, например группировать и сортировать, отсекать по лимиту 10;
2) Для каждой позиции п.1 получить количество строк. (очень легко совместить с п.1 в запросе);
3) Для каждой позиции из п.1 получить связанные данные из таблицы Книга, поля Название и Автор - тут уже можно join использовать или через вложенный запрос делать.
Agency вне форума Ответить с цитированием
Старый 26.05.2022, 12:30   #3
olgavv
 
Регистрация: 03.02.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от dmmelg Посмотреть сообщение
У меня пока появились мысли только по действиям. Как я понимаю, нужно обьединить таблицы книги и журнал выдачи с помощью inner join, потом вывести таблицу, которая получилась и после использовать count.( могу ошибаться). С практикой сложнее....Помогите пжл)
вы совершенно правы. для вашей задачи можно не использовать таблицу читатели, а только объединение журнала выдачи книг и список книг:
SELECT * FROM ЖурналВыдачи INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID

вот и получилась ваша таблица. в ней одна и та же строка из таблицы Книга повторяется столько раз, сколько для этой книги разных записей в ЖурналеВыдачи. т.е. теперь с помощью count вам надо сосчитать количество строк в результирующей таблице по идентификатору книги

SELECT Книга.ID, Сount(*) FROM ЖурналВыдачи INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID GROUP BY Книга.ID

Поскольку вас в результате интересует название и автор, то есть смысл добавить в набор SELECT эти два поля (так как они однозначно определяются по идентификатору, то количество строк или количество выдач останется прежним). И не забываем добавлять в раздел группировки все поля, появляющиеся в разделе select:

SELECT Книга.ID, Книга.Название, Книга.Автор, Сount(*) FROM ЖурналВыдачи INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID GROUP BY Книга.ID, Книга.Название, Книга.Автор

Вот вы и получили таблицу книг с количеством выдач каждой. Если отсортировать (ORDER BY) эту таблицу по количеству выдач, причем от большего к меньшему (DESC):

SELECT Книга.ID, Книга.Название, Книга.Автор, Сount(*) AS КоличествоВыдач
FROM ЖурналВыдачи
INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID
GROUP BY Книга.ID, Книга.Название, Книга.Автор
ORDER BY КоличествоВыдач DESC

, то тогда вас будут интересовать только первые 10 строк:

SELECT TOP 10 Книга.ID, Книга.Название, Книга.Автор, Сount(*) AS КоличествоВыдач
FROM ЖурналВыдачи
INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID
GROUP BY Книга.ID, Книга.Название, Книга.Автор
ORDER BY КоличествоВыдач DESC

замечание1: в условии сказано, что выдать только наименование и автора. вроде как идентификатор Книга.ID можно убрать и из select и из group by. но вот как быть, если есть две книги с одинаковым названием и авторы-однофамильцы? считать это за одну книгу (убрать из последнего кода Книга.ID) или за разные (оставить Книга.ID) ?
замечание2: мы выбрали популярные книги за все время существования библиотеки. если интересует популярность за какой-то период c "дата1" по "дата2", то должно использоваться условие WHERE:


SELECT TOP 10 Книга.ID, Книга.Название, Книга.Автор, Сount(*) AS КоличествоВыдач
FROM ЖурналВыдачи
INNER JOIN Книга ON ЖурналВыдачи.ID_book = Книга.ID
WHERE ЖурналВыдачи.ДатаВозврата < "дата1" AND ЖурналВыдачи.ДатаПолучения > "дата2"
GROUP BY Книга.ID, Книга.Название, Книга.Автор
ORDER BY КоличествоВыдач DESC
olgavv вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать скрипт, который выгрузит данные из файла в формате JSON, создаст SQL таблицу и написать SQL запрос Mangum Фриланс 3 11.03.2016 05:21
Помогите написать запрос qvernaut SQL, базы данных 6 26.11.2015 20:26
Написать запрос Nickolay0512 SQL, базы данных 7 06.03.2015 10:54
Как написать запрос Lecter2009 Помощь студентам 3 18.03.2010 08:19
написать запрос elena222 SQL, базы данных 1 18.01.2010 15:36