Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Грабли Мартина в аксессе (запрос-найти максимального из группы) / 25 сообщений из 48, страница 1 из 2
12.05.2004, 12:10
    #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
12.05.2004, 12:43
    #32514594
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
select max([FieldName]) as [Alias] from [TableName]
...
Рейтинг: 0 / 0
12.05.2004, 12:43
    #32514595
vlad_707
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
вот ещё вопросик
как найти количество продавцов?
по граберу делается так:
SELECT count (distinct SNUM)
FROM Orders

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

SELECT count(snum) AS Выражение1
FROM (select distinct snum from orders)
...
Рейтинг: 0 / 0
12.05.2004, 12:59
    #32514631
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
2 vlad_707
Я написал просто через макс - соответсвенно вместо TableName может быть подзапрос с суммой продаж по продавцам.
...
Рейтинг: 0 / 0
12.05.2004, 13:08
    #32514651
vlad_707
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
А без подзапросов никак ??? у Грабера делается одним
П.С. по Граберу до подзапросов я ещё не дошёл
с подзапросами понятно....
...
Рейтинг: 0 / 0
12.05.2004, 13:14
    #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
12.05.2004, 14:21
    #32514788
Serge I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
ЗЫ. Потренироваться в написании запросов можно здесь:

http://sql.ipps.ru

или сразу

http://sql.ipps.ru/exercises.php
...
Рейтинг: 0 / 0
12.05.2004, 15:01
    #32514868
vlad_707
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
-)) спасибо.., если б за это ещё з.п. платили-)
...
Рейтинг: 0 / 0
12.05.2004, 18:09
    #32515228
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
Ба! Какие люди нас посетили! :)
2 Serge I - пламенный привет!
...
Рейтинг: 0 / 0
12.05.2004, 18:21
    #32515245
Serge I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
To VIG
Так вот вы где пропадаете.
А я все жду писем.:-)
...
Рейтинг: 0 / 0
12.05.2004, 19:50
    #32515376
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
Ну "пропадаете" это громко сказано, так , заглядываю иногда на огонек :)
...
Рейтинг: 0 / 0
14.05.2004, 11:38
    #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
14.05.2004, 11:47
    #32517644
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
inner - зарезервированное слово!!!

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

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

И не всех на 3 октября, а всех на 3 октября 1990 года
...
Рейтинг: 0 / 0
14.05.2004, 12:11
    #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
14.05.2004, 12:18
    #32517748
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
#10/03/1990# - 3 октября (3 октября Гендальф дрался с назгулами на Заверети :) )
#03/10/1990# - 10 марта

что-то не так с данными, может их вбили не совсем корректно?
...
Рейтинг: 0 / 0
14.05.2004, 12:44
    #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
14.05.2004, 12:49
    #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
14.05.2004, 12:55
    #32517889
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
автор в другом топике писал:Господа модераторы. Может мой топик "запрос-найти максимального из группы"
переименовать в "Грабли Мартина в аксессе". я туда скидываю все вопросы,которые не получаются выполнить в аксессе по этой книге.
Мартин Грабер "Введение в SQL".
Переименовываю.
...
Рейтинг: 0 / 0
14.05.2004, 14:37
    #32518276
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
2 paparone
Не америкосы , а американцы. (Тут ,слава богу ,не ПТ а профессиональный форум).
А в остальном все правильно.
...
Рейтинг: 0 / 0
14.05.2004, 15:59
    #32518509
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
2 VIG

Ок - учту
...
Рейтинг: 0 / 0
17.05.2004, 17:27
    #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
17.05.2004, 17:33
    #32520923
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли Мартина в аксессе (запрос-найти максимального из группы)
Что-то подобное несколько раз пробегало

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

Выход - заносить результат во временную таблицу и только потом Update поля c
...
Рейтинг: 0 / 0
17.05.2004, 17:58
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Грабли Мартина в аксессе (запрос-найти максимального из группы) / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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