powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Грабли Мартина в аксессе (запрос-найти максимального из группы)
48 сообщений из 48, показаны все 2 страниц
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514525
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
изучаю Грабера... (отучаюсь от конструктора запросов)
есть табличка с полями SNUM и AMT (номер продавца и количество проданного за день)

нужно найти продавца который имеет максимальные продажи
делаю так:
SELECT Top 1 Orders.SNUM, Sum(Orders.AMT)
FROM Orders
GROUP BY Orders.SNUM
ORDER BY Sum(Orders.AMT) DESC;

Вопрос как написать лучше или это нормальный метод
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514594
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select max([FieldName]) as [Alias] from [TableName]
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514595
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот ещё вопросик
как найти количество продавцов?
по граберу делается так:
SELECT count (distinct SNUM)
FROM Orders

в аксессе такое не прокатывает, так же как
SELECT count (*)
FROM Orders
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514601
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer
я не понял тебя.
мне нужно найти сумму проданного каждым продавцом и взять максимальное значение одним запросом
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514630
RustamSaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кол-во продавцов примерно так.

SELECT count(snum) AS Выражение1
FROM (select distinct snum from orders)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514631
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vlad_707
Я написал просто через макс - соответсвенно вместо TableName может быть подзапрос с суммой продаж по продавцам.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514651
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А без подзапросов никак ??? у Грабера делается одним
П.С. по Граберу до подзапросов я ещё не дошёл
с подзапросами понятно....
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514667
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максимум могут иметь несколько продавцов. Поэтому лучше так:

SELECT * FROM
(
SELECT Orders.SNUM ID_ord, Sum(Orders.AMT) SUM_amt
FROM Orders
GROUP BY Orders.SNUM
) x

WHERE SUM_amt >= ALL
(SELECT Sum(Orders.AMT) FROM Orders
GROUP BY Orders.SNUM)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514788
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. Потренироваться в написании запросов можно здесь:

http://sql.ipps.ru

или сразу

http://sql.ipps.ru/exercises.php
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32514868
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-)) спасибо.., если б за это ещё з.п. платили-)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32515228
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ба! Какие люди нас посетили! :)
2 Serge I - пламенный привет!
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32515245
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To VIG
Так вот вы где пропадаете.
А я все жду писем.:-)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32515376
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну "пропадаете" это громко сказано, так , заглядываю иногда на огонек :)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517614
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
продолжаю изучение Мартина Грабера. появился новый вопрос:
Тема СВЯЗАННЫЕ ПОДЗАПРОСЫ
из теории:
вот способ найти всех заказчиков в Заказах на 3-е октября :

SELECT *
FROM Customers outer
WHERE 10/03/1990 IN
(SELECT odate
FROM Orders inner
WHERE outer.cnum = inner.cnum);

Я проверяю... запрос пишет ошибки на алиасах...-(....
хм... меняю имена алиасов на "a" , "b"
запрос выводится пустым....
хотя должен выводить 4 записи
Вопрос чё не так в аксессе ?????????
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517644
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inner - зарезервированное слово!!!

10/03/1990 - это не дата - это 10 деленное на 3 и деленное на 1990

А дата пишется так: #10/03/1990#

И не всех на 3 октября, а всех на 3 октября 1990 года
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517725
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм..... в книге указано, как я писал исходно...
ранее пробовал такой запрос,тоже думал,что не понимает как дату...
SELECT *
FROM Customers AS a
WHERE #10/03/1990# IN
(SELECT odate
FROM Orders b
WHERE a.cnum = b.cnum);
выводит пустые строки....

такой запрос соответственно работает

SELECT DISTINCT Customers.*, Orders.ODATE
FROM Customers INNER JOIN Orders ON Customers.CNUM = Orders.CNUM
WHERE (((Orders.ODATE)=#3/10/1990#));

Что не так во связанном ???
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517748
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
#10/03/1990# - 3 октября (3 октября Гендальф дрался с назгулами на Заверети :) )
#03/10/1990# - 10 марта

что-то не так с данными, может их вбили не совсем корректно?
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517847
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда я что то не понимаю....
данные таблицы
ODATE
10.03.1990
10.04.1990
10.03.1990
10.04.1990
10.06.1990
10.05.1990
10.06.1990
10.03.1990
10.03.1990
10.03.1990

переправил запрос на
SELECT *
FROM Customers AS a
WHERE #03/10/1990# IN
(SELECT odate
FROM Orders b
WHERE a.cnum = b.cnum);
хм... и он заработал......
причём, когда в конструкторе запросов на условие пишешь 10.03.1990 в SQL строке аксесс записывает #03/10/1990#.... и выдаёт нужный результат.....
это что, подстава??????????????????????????????????
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517868
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпричём, когда в конструкторе запросов на условие пишешь 10.03.1990 в SQL строке аксесс записывает #03/10/1990#.... и выдаёт нужный результат.....
это что, подстава??????????????????????????????????

нет - это так и есть

10.03.1990 - это 10 марта 1990 года (в русском представлении даты)
03/10/1990 - то же число только по американски

Мы пишем дату в формате dd.mm.yyyy, а америкосы mm/dd/yyyy
А акс как известно америкосами писан :)

В конструкторе вы дату пишете в вашей локали, а система ее сама приводит к типу понятному Аксу, а ему как раз понятен американский формат даты

Удачи!
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32517889
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
автор в другом топике писал:Господа модераторы. Может мой топик "запрос-найти максимального из группы"
переименовать в "Грабли Мартина в аксессе". я туда скидываю все вопросы,которые не получаются выполнить в аксессе по этой книге.
Мартин Грабер "Введение в SQL".
Переименовываю.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32518276
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 paparone
Не америкосы , а американцы. (Тут ,слава богу ,не ПТ а профессиональный форум).
А в остальном все правильно.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32518509
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 VIG

Ок - учту
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520913
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такого примера я не нашёл в Грабере (может я пока слеп)
есть таблица T
a__b__c
1__1__0
1__2__0
2__3__0
2__4__0
3__5__0
нужно найти сумму b по групперовке а и записать её в каждой записи поля с для соответствующих а....?????????????????????
какие будут предложения.
П.С. есть рабочий вариант для sql сервера, но в аксессе он не работает
(т.е
должен получиться столбец с
с
3
3
7
7
5
)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520923
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то подобное несколько раз пробегало

Есть такое в Аксе - он не может упдейтить таблицу т.к. запрос делается из самой таблицы с группировкой ()

Выход - заносить результат во временную таблицу и только потом Update поля c
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520959
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на SQL сервере сделали такой запрос и он работает
UPDATE t1
SET c = (SELECT SUM(t2.b) FROM t AS t2 WHERE t1.a = t2.a GROUP BY t2.a)
FROM t AS t1

Грабер пишет такое:
Сам подзапрос не должен использовать предложения GROUP BY или HAVING.

Делаю так: (что не работает- пишет,что запрос должен быть обновлённым)
делаю первый сохран запрос
z1
SELECT t.a, Sum(t.b) AS sb
FROM t
GROUP BY t.a;

и конечный запрос
UPDATE t
SET c = (SELECT z1.sb FROM z1 WHERE z1.a = t.a);
Что тут нужно ещё подшаманить?? и как бы всётаки записать одним запросом или как-нибудь вообще
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520970
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй в свойствах обоих запросов поставить
Тип набора записей = Динамический набор (несогл.)

Но это точно шаманство

Если получиться напиши как - мне тоже интерестно :)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520972
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в приципе суть в том чтобы из подчиненного запроса перекинуть в from главного запроса и чтоб остался inner join
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520978
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не проверял синтаксис
что то вроде

UPDATE t
SET c = z1.sb
FROM t inner join z1 on z1.a = t.a
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520982
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК

Это точно Акс, а не MSSQL?
Что-то сомнения берут :(

И что-то мне подсказывает, что все равно получим сообщение, запрос должен быть обновляем :(
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520989
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм...
АлексейК
идею понял, но пишет, что пропущен оператор в FROM...........................
paparome- извени ,но как это сделать
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32520992
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конструкторе запроса
правой кнопкой мыши --> свойства
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521007
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome
хм... а в свойствах запроса на изменение нет такого свойства
Тип набора записей ............................
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521014
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда меняй только там, где есть :)

Повторюсь - это шаманство - и вряд ли поможет :(
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521032
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не помогло.....
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521057
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели в АКСЕСС эта задача не решаема ??????????????????????
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521476
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решаема, но через временную
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521551
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я же пробовал через сохранёный запрос ...не помогло
пробовал таким образом
1)
SELECT t.a, Sum(t.b) AS sb INTO z1t
FROM t
GROUP BY t.a;

UPDATE t SET c = (SELECT z1t.sb FROM z1t WHERE z1t.a = t.a);

это тоже не помогло- Пишет ,что в операции должен использоваться обновлённый запрос...

попутно,2) как в аксессе сделать CREATE VIEW (или как програмно сохранить запрос)
и3) как сделать временную таблицу (или что есть временная таблица в аксессе??)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521567
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE t INNER JOIN z1t On t.a = z1t.a
SET t.c = z1t.sb;

?
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32521591
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю! Наконец-то заработало....
Работающий в аксессе вариант:
---------------------------------
SELECT t.a, Sum(t.b) AS sb INTO z1t
FROM t
GROUP BY t.a;

UPDATE t INNER JOIN z1t On t.a = z1t.a
SET t.c = z1t.sb;
----------------------------------
А можно мне в двух словах объяснить - чем сохранёный запрос отличается от врем таблицы?? (почему с табл запрос обновляемый, а с сохран запросом- нет..??)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32522450
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому-что при обращении к запросу он каждый раз вычисляется + идет группировка, т.е. такой запрос не является обновляемым

А после того как вы занесли данные в таблицу можете с ней делать все что-хотите :) (добавить/удалить/изменить записи - они уже не привязаны к таблице-источнику)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523834
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку
Чтобы не менять местами день и месяц в датах при использовании SQL, в Access можно использовать функцию CDate:

Where CDate('10/03/1999') IN ...

Эта функция преобразовывает строковое представление даты к типу дата с учетом региональных настроек.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523889
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Serge I:

Соответственно, при разных региональных настройках она будет работать по-разному. Это будет большой подводный камень в программе.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523948
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
Согласен, но в большинстве случаев мы пишем программы для внутреннего употребления.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523955
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Внутреннее - это внутри России? :^)
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523974
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сказал в гомогенной области с одинаковыми региональными настройками.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32523983
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но если человек по какой-нибудь причине поменяет себе настройки (например, чтобы распечатать что-нибудь в другом формате), то сразу перестанут работать все программы, которые зависят от настроек.
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32524004
Serge I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же согласился с вами. Просто хочу заметить, что мне часто приходится менять разделитель в дате, но никогда я не менял местами день и месяц (разве что в SQL :-)).
...
Рейтинг: 0 / 0
Грабли Мартина в аксессе (запрос-найти максимального из группы)
    #32524036
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Грабли Мартина в аксессе (запрос-найти максимального из группы)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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