|
запрос к бд задача
|
|||
---|---|---|---|
#18+
Есть БД библиотека. Вот несколько таблиц из нее: Выдачи книг: - ID экземпляра - Дата выдачи - Дата возврата - № читательского билета - ID выдавшего сотрудника Сотрудники: - ID сотрудника - Имя - Фамилия - Год рождения Необходимо найти сотрудника, выдавшего книги наибольшему и наименьшему количеству различных читателей. Формулировка мутноватая, но мне кажется надо вывести обоих. Не очень понимаю, как различных именно читателей выделить тут было бы оптимально. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 19:56 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
Необходимо найти сотрудника, выдавшего книги наибольшему и наименьшему polignomt . Формулировка мутноватая, но мне кажется надо вывести обоих. кэп одобряет, вы движетесь в правильном направлении. Не очень понимаю, как различных именно читателей выделить тут было бы оптимально. ну а какие у вас быи идеи для решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 20:15 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
felix_ff, SELECT TOP 1 name[имя], sec_name[фамилия] FROM (SELECT name, sec_name,COUNT(DISTINCT num_card[номер читательского]) AS unic_ID, FROM book_out[таблица с экземплярами] INNER JOIN stuff[таблица с сотрудниками] ON book_out.stuff_ID = stuff.stuff_ID GROUP BY name, sec_name ORDER BY COUNT(DISTINCT num_card) DESC ) UNION SELECT TOP 1 name, sec_name FROM table FROM (SELECT name, sec_name,COUNT(DISTINCT num_card) AS unic_ID, FROM book_out INNER JOIN stuff ON book_out.stuff_ID = stuff.stuff_ID GROUP BY name, sec_name ORDER BY COUNT(DISTINCT num_card) ASC ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 20:31 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt felix_ff, SELECT TOP 1 name[имя], sec_name[фамилия] FROM (SELECT name, sec_name,COUNT(DISTINCT num_card[номер читательского]) AS unic_ID, FROM book_out[таблица с экземплярами] INNER JOIN stuff[таблица с сотрудниками] ON book_out.stuff_ID = stuff.stuff_ID GROUP BY name, sec_name ORDER BY COUNT(DISTINCT num_card) DESC ) UNION SELECT TOP 1 name, sec_name FROM table FROM (SELECT name, sec_name,COUNT(DISTINCT num_card) AS unic_ID, FROM book_out INNER JOIN stuff ON book_out.stuff_ID = stuff.stuff_ID GROUP BY name, sec_name ORDER BY COUNT(DISTINCT num_card) ASC ) пока все плохо. вы видите что ваш синтаксис не валидный и даже не выполнится на сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 20:45 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt, я дам вам небольшой вектор, подумайте над данным запросом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
вы должны оперировать из поставленной задачи таблицей выдач, непосредственно данные о сотруднике вы соедините в конце. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 20:53 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
felix_ff, не очень понятно, как данные о сотрудниках соединять в конце, если мне нужно по разному для каждого сортировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 22:20 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt, получите 2 шт [employee_id] из таблицы Выдачи книг и соедините их с таблицей сотрудников ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 22:38 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
godsql, приходит в голову только такое, но проверить, адекватно ли это негде, а в голове компилировать тоже сомнительно, тк я занимаюсь sql очень недавно( WITH table AS ( SELECT MAX(num) AS first, MIN(num) AS second FROM (SELECT COUNT(* ) as num , ID_stuff FROM (SELECT DISTINCT ID_stuff, num_card FROM books_out GROUP BY ID_stuff) ORDER BY COUNT (*) DESC) ) SELECT name FROM staff INNER JOIN table ON stuff.ID_stuff = table.ID_stuff ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 16:20 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt, неверно. у вас д.б. два различных запроса. один - находит мах, другой - min. т.е. 1) посчитать count (dist № читательского билета) для ID выдавшего сотрудника 2) найти мах и min 3) соединить с Сотрудники по ID выдавшего сотрудника ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 16:50 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
godsql, правильно ли я понимаю, что вы это имеетее в виду? WITH table AS ( SELECT ID_stuff, COUNT(DISTINCT num_card[№ чит.билета] ) FROM books_out GROUP BY ID_stuff HAVING COUNT(DISTINCT num_card) = (SELECT MAX(COUNT(DISTINCT num_card))) UNION SELECT ID_stuff, COUNT(DISTINCT num_card[№ чит.билета] ) FROM books_out GROUP BY ID_stuff HAVING COUNT(DISTINCT num_card) = (SELECT MIN(COUNT(DISTINCT num_card))) ) SELECT name FROM staff INNER JOIN table ON stuff.ID_stuff = table.ID_stuff ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 17:10 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt, А если несколько сотрудников выдали одинаковое наибольшее (наименьшее) количество книг. Что запрос должен вернуть в таком случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 17:52 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
Alex_Va, Думаю должен вернуть их всех, но, вероятно, надо тогда их как то разделить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 18:02 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
polignomt godsql, правильно ли я понимаю, что вы это имеетее в виду? WITH table AS ( SELECT ID_stuff, COUNT(DISTINCT num_card[№ чит.билета] ) FROM books_out GROUP BY ID_stuff HAVING COUNT(DISTINCT num_card) = (SELECT MAX(COUNT(DISTINCT num_card))) UNION SELECT ID_stuff, COUNT(DISTINCT num_card[№ чит.билета] ) FROM books_out GROUP BY ID_stuff HAVING COUNT(DISTINCT num_card) = (SELECT MIN(COUNT(DISTINCT num_card))) ) SELECT name FROM staff INNER JOIN table ON stuff.ID_stuff = table.ID_stuff немножко не так проще всего Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 18:41 |
|
запрос к бд задача
|
|||
---|---|---|---|
#18+
godsql, спасибо! : ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 20:24 |
|
|
start [/forum/topic.php?fid=46&fpage=14&tid=1684300]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
119ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 464ms |
0 / 0 |