|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.03.2022, 13:52 | #1 |
Пользователь
Регистрация: 01.11.2021
Сообщений: 14
|
Написать sql запрос
Добрый день! Только начинаю учить sql, поэтому столкнулась с трудностью.
У меня пока появились мысли только по действиям. Как я понимаю, нужно обьединить таблицы книги и журнал выдачи с помощью inner join, потом вывести таблицу, которая получилась и после использовать count.( могу ошибаться). С практикой сложнее....Помогите пжл) |
26.03.2022, 12:14 | #2 |
Форумчанин
Регистрация: 07.10.2017
Сообщений: 101
|
Разбейте задачу на этапы, для каждого этапа напишите отдельный запрос, потом обобщите...
Например: 1) Получить из Журнала выдачи 10 максимально часто встречающихся строк ID_book - можно делать разными способами, например группировать и сортировать, отсекать по лимиту 10; 2) Для каждой позиции п.1 получить количество строк. (очень легко совместить с п.1 в запросе); 3) Для каждой позиции из п.1 получить связанные данные из таблицы Книга, поля Название и Автор - тут уже можно join использовать или через вложенный запрос делать. |
26.05.2022, 12:30 | #3 | |
Регистрация: 03.02.2010
Сообщений: 8
|
Цитата:
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 |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать скрипт, который выгрузит данные из файла в формате 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 |