powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Задача Access по двум таблицам,
25 сообщений из 30, страница 1 из 2
Задача Access по двум таблицам,
    #36627025
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в этом деле человек не сведущий, мне нужно составить запрос к базе данных, при выполнении которого будет выдаваться на экран список исполнителей (название исполнителя и дата рождения/образования), отсортированный по дате рождения/образования, а также доход, полученный исполнителями от продажи своих дисков.

вот что я придумал Select musicians.msc_id , musicians.msc_birthday from musicians inner join disks on musicicans.msc_id = disks.dsk_id group by musicians.msc_birthday
но доход (я так понимаю это SUM(DISKS.DSK_PROFIT)) я вообще не знаю куда вписывать да и мой запрос чтото не работает.
я если честно делаю по практикуму и там не объясняется что такое inner join, оно есть во всех примерах и я так делал, но вообще я не понимаю 1 это или 2 команды, + в 1 примере есть left join... пожалуйста, объясните как можно проще, если это возможно.
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627038
1nfest,
про JOINы тут красиво написано (букв не много, есть примеры с рисунками)

по Вашему запросу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select musicians.msc_id , musicians.msc_birthday
from musicians inner join disks 
         on musicicans.msc_id = disks.dsk_id 
group by musicians.msc_birthday;

/* 
-добавляем доход, как Вы правильно заметили, SUM(DISKS.DSK_PROFIT)
-ищем в таблице disks поле с названием msc_id или похожим
  (это ссылка на аналогичное поле в таблице musicicans),
  записываем его в условие соединения на место ????
-добавляем группировку по musicians.msc_id
-добавляем сортировку по musicians.msc_birthday

в результ НЕ попадут музыканты, которые не выпустили ни одного диска
если нужны записи о ВСЕХ музыкантах, то условие соединения  поменять
на LEFT JOIN

select musicians.msc_id , musicians.msc_birthday, sum(disks.dsk_profit)
from musicians inner join disks 
         on musicicans.msc_id = disks.????
group by musicians.msc_id , musicians.msc_birthday
order by musicians.msc_birthday;
*/
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627049
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку таблицы, поля не приведены, ориентируемся на вкус и цвет, а также по понятиям. Так вот на слух связь
Код: plaintext
musicicans.msc_id = disks.dsk_id
задает совершенно разные сущности, связывает ид музыканта с ид диска. Правильно ли это?
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627128
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select musicians.msc_id , musicians.msc_birthday, sum(disks.dsk_profit)
from musicians inner join disks
on musicicans.msc_id = disks.msc_id
group by musicians.msc_id , musicians.msc_birthday
order by musicians.msc_birthday;

попробовал, пишет ошибка синтаксиса в операции JOIN при этом он выделяет on musicicans.msc_id = disks.msc_id
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627130
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1nfest,

musicicans - это что? почему не musicicicians?
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627132
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про JOIN прочитал, спасибо
Ваш вариант был правильный, только он что-то ругался, правда msc_id надо было изменить на msc_name:

select musicians.msc_name, musicians.msc_birthday, sum(disks.dsk_profit)
from musicians inner join disks
on musicians.msc_id = disks.msc_id
group by musicians.msc_name , musicians.msc_birthday
order by musicians.msc_birthday;

вы не моглибы мне поточнее объяснить разницу group by и order by?
ведь по сути одно значит сгрупировать по... рассортировать по...
я просто не понимаю почему здесь написано именно group by musicians.msc_name , musicians.msc_birthday и нету например group by sum(disks.dsk_profit)
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627140
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да ошибся в написании вот и ошибка была)
а так вроде тут разобрался,
сейчас нужно составить запрос к базе данных, при выполнении которого будет выдаваться на экран список стран и доход, полученный всеми исполнителями страны по годам выпуска дисков

совершенно не понимаю как это можно написать
что-то типо

select musicians.msc_country, sum(disks.dsk_profit), musicians.msc_name
from musicians inner join disks
on musicians.msc_id = disks.msc_id
group by disks.dsk_year, musicians.msc_country, musicians.msc_name

у меня он показывает колонку msc_country, но страны повторяются: usa usa usa usa russia russia итп, при этом следующая колонка- доход, идет правильно и она рассортирована вроде по датам, а след колонка уже название групп, как мне изменить запрос чтобы он показывал список стран 1 раз (я чтото вообще не представляю что тут надо написать)
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627145
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется
select musicians.msc_country, sum(disks.dsk_profit), disks.dsk_year
from musicians inner join disks
on musicians.msc_id = disks.msc_id
group by disks.dsk_year, musicians.msc_country
вполне отвечае условиям задачи =)
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627149
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Составить запрос к базе данных, при выполнении которого будут выдаваться на экран список из 3-х исполнителей/групп, выпустивших максимальное количество дисков за период с 1985 по 2005 годы, с указанием количества дисков и года образования/рождения группы/исполнителя.

А как в таком запросе ставить ограничение на показ только трех исполнителей,
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627156
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select Top 3 ...
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627158
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел, вроде команда TOP 3.
написал я запрос

select top 3 musicians.msc_name, sum(disks.dsk_copies)
from musicians inner join disks
on musicians.msc_id = disks.msc_id
where disks.dsk_year between #01/01/1995# and #12/31/2004#
group by musicians.msc_name

который нефига не работает
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627164
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хватает сортировки, причем в обратном порядке
Код: plaintext
Order By sum(disks.dsk_copies) Desc
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627165
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, сортировки не хватает, но еще проблема в том, что
where disks.dsk_year between #01/01/1985# and #01/01/2005#
не работает, если удаляю эту строку, показывает топ 3, а если оставляю то таблица пустая... где то ошибка чтоли
спасибо!
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627171
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1nfest,

поле disks.dsk_year это даты или года? Т.е., поле датное или числовое?
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627181
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
числовое целое!
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627182
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял ошибку, правильный запрос:

select top 3 musicians.msc_name, sum(disks.dsk_copies), musicians.msc_birthday
from musicians inner join disks
on musicians.msc_id = disks.msc_id
where disks.dsk_year between 1985 and 2005
group by musicians.msc_name, musicians.msc_birthday, disks.dsk_year
Order By sum(disks.dsk_copies) Desc
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36627374
1nfestПро JOIN прочитал, спасибо
Ваш вариант был правильный, только он что-то ругался, правда msc_id надо было изменить на msc_name:

select musicians.msc_name, musicians.msc_birthday, sum(disks.dsk_profit)
from musicians inner join disks
on musicians.msc_id = disks.msc_id
group by musicians.msc_name , musicians.msc_birthday
order by musicians.msc_birthday;

вы не моглибы мне поточнее объяснить разницу group by и order by?
ведь по сути одно значит сгрупировать по... рассортировать по...
я просто не понимаю почему здесь написано именно group by musicians.msc_name , musicians.msc_birthday и нету например group by sum(disks.dsk_profit)
про ORDER BY и GROUP BYК сожалению не нашел столь-же крассивого объяснения, как для JOIN . Попробую свими словами.

С ORDER BY все просто. Предложение указывает, каким образом должен быть упорядочен выходной набор данных. Всё.

Теперь про GROUP BY (возможно путано, зато от всей души). Небольшое лирическое отступление. К результатам запроса могут применяться агрегирующие фунции: уже известная Вам SUM() , AVG() , подсчитывающая среднее, MIN() и MAX() , - соответственно наименьшее и наибольшее занчения.

GROUP BY указывает по каким признакам разделить результаты запроса на группы, для каждой из которых в отдельности будет вычислена агрегирующая функция. Если в предложении FROM кроме агрегирующих функций есть обращения к другим полям, то перечень этих полей обязательно требуется включить в предложение GROUP BY.
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628056
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх, ребят, предпоследний запрос, возможно последний который я тут пишу тк зачет через час:
Составить запрос к базе данных, при выполнении которого будут выдаваться на экран список стран и количество дисков, выпущенных в каждой из стран за период с 1985 по 2005 годы, отсортированный в порядке убывания количества выпущенных дисков и только те страны, в которых было выпущено более 100 000 дисков.
Вот что я об этом думаю:

select musicians.msc_contries, disks.dsk_copies from musicians inner join disks
on musicians.msc_id = disks.dsk_id
where disks.dsk_year between 1985 and 2005
group by musicians.msc_countries, disks.dsk_copies
order by sum(disks.dsk_copies) desc

мой вопрос, как сюда запихнуть еще 1 условие? какая команда это делает?
условие как вы понимаете "выпуск более 100 000 дисков....
у меня конечно есть вариант написать union и еще раз всю таблицу переписать и лишь where изменить на другое условие но это по-моему бред)
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628075
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
1nfest
Код: plaintext
1.
2.
3.
4.
5.
select musicians.msc_contries, disks.dsk_copies from musicians inner join disks
on musicians.msc_id = disks.dsk_id
where disks.dsk_year between  1985  and  2005 
group by musicians.msc_countries, disks.dsk_copies
having sum(disks.dsk_copies) >  100000 
order by sum(disks.dsk_copies) desc
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628091
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ура! спасибо) понял, "having"

остался последний:
Составить запрос к базе данных, при выполнении которого будут выдаваться на экран список стран и средняя стоимость дисков в каждой из стран.

который я совершенно не понимаю, нам нужно посчитать средннюю стоимость дисков в каждой из стран, это значит что нужно весь доход поделить на все кол-во дисков, как это посчитать без арифметических действий, через команды...
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628106
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
...подождите, а где у вас это?
1nfest...
Составить запрос к базе данных, при выполнении которого будут выдаваться на экран список стран и количество дисков, выпущенных в каждой из стран за период с 1985 по 2005 годы, отсортированный в порядке убывания количества выпущенных дисков и только те страны, в которых было выпущено более 100 000 дисков.

наверно сумма за период нужна, а не погодам...имхо
типа так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select musicians.msc_contries, sum(disks.dsk_copies) As sum_dsk_copies
from musicians inner join disks
  on musicians.msc_id = disks.dsk_id
where disks.dsk_year between  1985  and  2005 
group by musicians.msc_countries
having sum(disks.dsk_copies) >  100000 
order by sum(disks.dsk_copies) desc
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628114
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сгруппировать по странам и применить функцию Avg
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628119
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
1nfest...
как это посчитать без арифметических действий, через команды...
вот так
Код: plaintext
1.
avg(цена_диска)
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628196
1nfest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select musicians.msc_countries, avg(disks.dsk_profit/disks.dsk_copies) as Sum-Profit
from musicians inner join disks on musicians.msc_id = disks.msc_id
group by musicians.msc_countries, avg(disks.dsk_profit/disks.dsk_copies)

так?
...
Рейтинг: 0 / 0
Задача Access по двум таблицам,
    #36628213
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
однозначно это лишнее
1nfestselect musicians.msc_countries, avg(disks.dsk_profit/disks.dsk_copies) as Sum-Profit
from musicians inner join disks on musicians.msc_id = disks.msc_id
group by musicians.msc_countries, avg(disks.dsk_profit/disks.dsk_copies)

так?
и что такое disks.dsk_profit - это цена/стоимость ?? или что ?
если цена то просто avg(disks.dsk_profit)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Задача Access по двум таблицам,
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]