Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 31.01.2016
Сообщений: 26

Нормально ли то, что запрос у меня получился такой длинный?

21.11.2016, 19:04. Показов 1731. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день, Уважаемые Форумчане!
Я недавно начал изучать SQL. Начал делать курсовую работу, код задания получился довольно таки длинный и повторяется один и тот же подзапрос в нескольких местах. Это хорошо или плохо, что запрос такой длинный. Если можно укоротить, то как? Я думал над этим, но всё таки в голову больше ничего не приходит.
Суть базы в том, что там хранится информация о торгах на товарно-сырьевой бирже. На торги могут быть представлены разные товары одной и той же фирмы и одни и те же товары разных фирм. В одну партию товаров включаются разнообразные товары от разных производителей.
Текст задания:
Найти фирму-производителя товаров, которая за заданный период времени выручила максимальную сумму денег.
Схема таблицы во вложении.
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
SELECT *
FROM (
    SELECT Фирмы.Название AS Фирма, SUM(Список.Выручка) AS Выручка
    FROM Фирмы, (
        SELECT Фирмы.Название AS Фирма, (Товары.Цена * ПартТов.Количество) AS Выручка
        FROM Партии, Фирмы INNER JOIN (Товары INNER JOIN ПартТов ON Товары.НомерТ = ПартТов.НомерТ) ON Фирмы.НомерФ = Товары.НомерФ
        WHERE Партии.НомерП = ПартТов.НомерП
        AND Партии.ДатаНачалаТоргов >= ДатаОт -- ДатаОт указывается при запуске запроса
        AND Партии.ДатаНачалаТоргов <= ДатаДо -- ДатаДо тоже
        GROUP BY Фирмы.Название, Товары.Цена * ПартТов.Количество
    ) AS Список
    WHERE Фирмы.Название = Список.Фирма
    GROUP BY Фирмы.Название
)  AS СписокВыручки
WHERE Выручка = (
    SELECT MAX(Выручка)
    FROM (
        SELECT Фирмы.Название AS Фирма, SUM(Список.Выручка) AS Выручка
        FROM Фирмы, (
            SELECT Фирмы.Название AS Фирма, (Товары.Цена * ПартТов.Количество) AS Выручка
            FROM Партии, Фирмы INNER JOIN (Товары INNER JOIN ПартТов ON Товары.НомерТ = ПартТов.НомерТ) ON Фирмы.НомерФ = Товары.НомерФ
            WHERE Партии.НомерП = ПартТов.НомерП
            AND Партии.ДатаНачалаТоргов >= ДатаОт
            AND Партии.ДатаНачалаТоргов <= ДатаДо
            GROUP BY Фирмы.Название, Товары.Цена * ПартТов.Количество
        ) AS Список
        WHERE Фирмы.Название = Список.Фирма
        GROUP BY Фирмы.Название
    )
);
Миниатюры
Нормально ли то, что запрос у меня получился такой длинный?  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2016, 19:04
Ответы с готовыми решениями:

Необходимо сделать вставку <b></b> по краям выделенного текста в Memo1, к примеру, что бы получился такой результат: <b>01</b>. Кто сможет помочь?
Имеется кнопка и текстовое поле: void __fastcall TForm1::Button7Click(TObject *Sender) { Memo1-&gt;SelText =...

Хочу собрать такой ПК. Нормально ли или что то другое?
Хочу собрать пк бюджет на системник 50000р вот такая конфигурация!Если что то не то посоветуйте плиз! Процессор Intel Core i5-7500 ...

Цикл while, как получился такой ответ?
Упражнение из учебника &quot;Изучаем Java&quot; Кэти Сьерра и к. Кстати веселый учебник, много примеров с разбором, более менее освояемый (после пары...

8
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
22.11.2016, 14:55
пишут или используя промежуточные временные таблицы
или вот такие длинные простыни

но обычно весь код хранят как хранимые процедуры\функции - тогда достаточно вызвать процедуру и передать ей параметры
1
2 / 2 / 0
Регистрация: 31.01.2016
Сообщений: 26
22.11.2016, 15:06  [ТС]
Спасибо. Посмотрел про хранимые процедуры. Жалко, что они не поддерживаются в Access.
0
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
22.11.2016, 15:12
как это не поддерживаются?
0
2 / 2 / 0
Регистрация: 31.01.2016
Сообщений: 26
22.11.2016, 15:18  [ТС]
Я сейчас читаю книгу Бена Форта, в главе про хранимые процедуры написано, что они не поддерживаются в Access и SQLite.
0
5971 / 4547 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
22.11.2016, 15:22
сорри
спутал
у меня клиент на аксессе был, сервер на MSSQL
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
22.11.2016, 17:20
Лучший ответ Сообщение было отмечено aydarhub как решение

Решение

А почему не используете TOP 1. Вроде будет попроще
SQL
1
2
3
4
5
6
SELECT TOP 1 Фирмы.Название, SUM([Цена]*[Количество]) AS Выручка
FROM (Фирмы INNER JOIN Товары ON Фирмы.НомерФ = Товары.НомерФ) INNER JOIN 
(Партии INNER JOIN ПартТов ON Партии.НомерП = ПартТов.НомерП) ON Товары.НомерТ = ПартТов.НомерТ
WHERE Партии.ДатаНачалаТоргов BETWEEN [ДатаОт] AND [ДатаДо]
GROUP BY Фирмы.Название
ORDER BY SUM([Цена]*[Количество]) DESC;
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
23.11.2016, 03:11
Цитата Сообщение от aydarhub Посмотреть сообщение
Посмотрел про хранимые процедуры. Жалко, что они не поддерживаются в Access.
а запросы поддерживаются? а функции в глобальных модулях поддерживаются?

Добавлено через 11 минут
1) Запрос Список

T-SQL
1
2
3
4
5
6
 SELECT Фирмы.Название AS Фирма, (Товары.Цена * ПартТов.Количество) AS Выручка
 FROM Партии, Фирмы INNER JOIN (Товары INNER JOIN ПартТов ON Товары.НомерТ = ПартТов.НомерТ) ON Фирмы.НомерФ = Товары.НомерФ
 WHERE Партии.НомерП = ПартТов.НомерП
 AND Партии.ДатаНачалаТоргов >= Forms!Мояформа!ДатаОт 
 AND Партии.ДатаНачалаТоргов <=  Forms!Мояформа!ДатаДо
 GROUP BY Фирмы.Название, Товары.Цена * ПартТов.Количество

2) СписокВыручки

T-SQL
1
2
3
    SELECT Фирмы.Название AS Фирма, SUM(Список.Выручка) AS Выручка
    FROM Фирмы inner join Список on Фирмы.Название = Список.Фирма
    GROUP BY Фирмы.Название

3) Итоговый:

T-SQL
1
2
3
SELECT top 1 *
FROM СписокВыручки
order by Выручка DESC
Создаёте форму с двумя полями для выбора дат и кнопкой, кстати только что выкладывал датные поля с календарём:

Добавлено через 5 минут
Календарик просто нужен
1
2 / 2 / 0
Регистрация: 31.01.2016
Сообщений: 26
23.11.2016, 16:14  [ТС]
Спасибо всем, кто ответил. Отдельное спасибо ltv_1953. Про TOP 1 забыл совсем, так и правда короче получается запрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2016, 16:14
Помогаю со студенческими работами здесь

Объясните, пожалуйста, как получился такой ответ
объясните пожалуйста Как получился такой ответ

Каким образом такой сервис как http://2ip.ru/ определяет, что у меня стоит Windows?
Каким образом такой сервис как http://2ip.ru/ определяет, что у меня стоит Windows? Хотелось бы знать: как заблокировать возможность...

Мне кажется, что если windows 8 останется такой, как сейчас, то нормально работать будет не возможно вообще=> 80% откажутся от нее. Вы согласны?
Мне кажется, что если windows 8 останется такой, как сейчас, то нормально работать будет не возможно вообще=&gt; 80% откажутся от нее. Вы...

не получился запрос
задание: на кожну дату для кожного магазина-замовниказамовлення, вартість замовленоїпартіїпродукції, суму до сплати...

Запрос в цикле или один длинный запрос?
Подскажите, пожалуйста, как лучше поступить? Есть магазин с 20 тыс товаров. Нужно обновить их по некоторым условиям. И вот вопрос, что...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru