Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 5
1

Несколько задач на составление сложных запросов

04.11.2015, 10:08. Показов 954. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа программисты! Помогите пожалуйста решить задачи по бд
надо с помощью сложных запросов вывести на экран выборку(?) из связных таблиц

база отдела учета недвижимости

Задачи:
1. Квартиры, в которых количество проживающих меньше среднего по каждому району.
2. Здания ветхого фонда (с износом на 40% больше среднего по каждому району), в которых проживает более 40% детей.
3. Здания с износом меньше среднего, построенные в течение последних 10 лет по данному району.
4. Найти с какой частотой сдавались дома в эксплуатацию в каждом районе.

PS создавал базу по книжке Гурвица (Access 2010. Разработка приложений на реальном примере)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2015, 10:08
Ответы с готовыми решениями:

Создание сложных запросов
Здравствуйте! Помогите, пожалуйста с созданием запросов в Access. Необходимо создать сложные...

Составление запросов
Умоляю, помогите... В понедельник сессия начинается... Задание в MS Access. • В таблицу Вклады...

Составление простых запросов
Суть темы - наконец то решил более менее научится составлять запросы к бд и понял что у меня дела...

Подготовка к решению сложных задач и задач олимп.уровня
Собственно, интересует какую литературу стоит почитать, для решению сложных и интересных задач или...

7
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
04.11.2015, 10:13 2
Читаем Правила раздела и выполняем их. Угадывать, какие у Вас реальные имена таблиц, полей, связи в схеме данных - неинтересно.
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 5
04.11.2015, 12:01  [ТС] 3
виноват
Вложения
Тип файла: rar Real Estate.rar (809.8 Кб, 11 просмотров)
0
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
04.11.2015, 13:12 4
Цитата Сообщение от Hooters Посмотреть сообщение
1. Квартиры, в которых количество проживающих меньше среднего по каждому району.
Проще будет разобраться если из подчиненных сделать сохраненные запросы Q3, Q4, Q2, Q1. В конструкторе посмотреть не получится из-за нестандартного INNER JOIN
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT Q1.AREA, Q1.NAME, Q1.HOUSE, Q1.Квартира
FROM (SELECT distict.AREA, street.NAME, building.DISTRICT, flat.HOUSE, flat.FLAT AS Квартира, COUNT(owners.NUMBER) AS Жильцов
   FROM ((distict INNER JOIN (street INNER JOIN building ON street.STREET = building.STREET) ON distict.DISTRICT = building.DISTRICT) 
   INNER JOIN flat ON (building.HOUSE = flat.HOUSE) AND (building.STREET = flat.STREET)) INNER JOIN owners ON (flat.FLAT = owners.FLAT) 
   AND (flat.HOUSE = owners.HOUSE) AND (flat.STREET = owners.STREET)
   GROUP BY distict.AREA, street.NAME, building.DISTRICT, flat.HOUSE, flat.FLAT)  AS Q1 
INNER JOIN 
   (SELECT Q3.DISTRICT, Жильцов/Квартир AS Среднее
   FROM 
      (SELECT building.DISTRICT, COUNT(FLAT) AS Квартир
      FROM building INNER JOIN flat ON (building.HOUSE = flat.HOUSE) AND (building.STREET = flat.STREET)
      GROUP BY building.DISTRICT)  AS Q3 
      INNER JOIN 
      (SELECT building.DISTRICT, COUNT(NUMBER) AS Жильцов
      FROM (building INNER JOIN flat ON (building.HOUSE = flat.HOUSE) AND (building.STREET = flat.STREET)) 
      INNER JOIN owners ON (flat.FLAT = owners.FLAT) AND (flat.HOUSE = owners.HOUSE) AND (flat.STREET = owners.STREET)
      GROUP BY building.DISTRICT)  AS Q4 
   ON Q3.DISTRICT = Q4.DISTRICT) AS Q2 
ON (Q1.Жильцов < Q2.Среднее) AND (Q1.DISTRICT = Q2.DISTRICT);
1
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
04.11.2015, 13:31 5
Для віполнения поставленой задачи делаю в 3 запроса. Каким макаром сделать один как на данном примере?

Добавлено через 1 минуту
Или скорость выполнения запроса на это не влияет?
0
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
04.11.2015, 13:48 6
В последнем запросе переходите в SQL и пишите, например, вместо FROM Запрос1 - FROM (его SQL без AS Запрос1 ... .
Не замечал, чтобы такие запросы выполнялись быстрее в Аксессе. Да и отлаживать их сложнее.
1
Модератор
Эксперт MS Access
11963 / 4831 / 779
Регистрация: 07.08.2010
Сообщений: 14,151
Записей в блоге: 4
04.11.2015, 14:36 7
не применяю таких нечитаемый запросов--пишу раздельные, затем объединяю в пакет(обычно через vba)

попробовала растащить монстра --получила нечто читаемое
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--------------q4-------жильцов по району---------
SELECT building.DISTRICT, COUNT(NUMBER) AS Жильцов
 FROM (building
 INNER JOIN flat
 ON (building.HOUSE = flat.HOUSE)
 AND (building.STREET = flat.STREET)) 
 INNER JOIN owners
 ON (flat.FLAT = owners.FLAT) AND (flat.HOUSE = owners.HOUSE)
 AND (flat.STREET = owners.STREET)
 GROUP BY building.DISTRICT
---------------q3-------квартир в доме------------
SELECT building.DISTRICT, COUNT(FLAT) AS Квартир
 FROM building
 INNER JOIN flat ON (building.HOUSE = flat.HOUSE) AND (building.STREET = flat.STREET)
 GROUP BY building.DISTRICT
 
---------------q2----------среднее Жильцов/Квартир по району--------------
SELECT Q3.DISTRICT, Жильцов/Квартир AS Среднее
 FROM Q3 
 INNER JOIN (q4  ON Q3.DISTRICT = Q4.DISTRICT) 
---------------q1------присоединение вскх справочников к жильцу -----
-----------------------и расчет жильцов в квартире----------------
SELECT distict.AREA, street.NAME, building.DISTRICT, flat.HOUSE,
 flat.FLAT AS Квартира, COUNT(owners.NUMBER) AS Жильцов
 FROM ((distict
 INNER JOIN (street
 INNER JOIN building
 ON street.STREET = building.STREET)
 ON distict.DISTRICT = building.DISTRICT) 
 INNER JOIN flat
 ON (building.HOUSE = flat.HOUSE)
 AND (building.STREET = flat.STREET))
 INNER JOIN owners
 ON (flat.FLAT = owners.FLAT)
 AND (flat.HOUSE = owners.HOUSE)
 AND (flat.STREET = owners.STREET)
 GROUP BY distict.AREA, street.NAME,
 building.DISTRICT, flat.HOUSE, flat.FLAT
----------------выборка требуемого--------------
 
SELECT Q1.AREA, Q1.NAME, Q1.HOUSE, Q1.Квартира
FROM ( Q1 INNER JOIN  ( Q2 ON (Q1.Жильцов < Q2.Среднее) AND (Q1.DISTRICT = Q2.DISTRICT);
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 5
06.11.2015, 12:27  [ТС] 8
Спасибо тем кто откликнулся, буду разбираться дальше.
0
06.11.2015, 12:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2015, 12:27
Помогаю со студенческими работами здесь

7 сложных запросов
Доброго времени суток, уважаемые знатоки ! Мне поставлена следующая задача. Сегодня экзамен....

Генератор (сложных) SQL-запросов
Привет! Есть приложение, которое получает данные из базы. Вариантов запросов много, запросы...

Создание сложных запросов в excel
Здравствуйте! Возникли сложности при создании некоторых запросов из базы в excel. Помогите...

Разработка сложных и коррелированных SQL-запросов
Вывести все сведения о продавцах, которые имеют покупателей, сделавших за 2001 год более 5...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru