Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Грабли Мартина в аксессе (запрос-найти максимального из группы)  [new]
vlad_707
Member

Откуда:
Сообщений: 470
изучаю Грабера... (отучаюсь от конструктора запросов)
есть табличка с полями SNUM и AMT (номер продавца и количество проданного за день)

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

Вопрос как написать лучше или это нормальный метод
12 май 04, 12:10    [673349]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Hummer
Member

Откуда:
Сообщений: 2583
select max([FieldName]) as [Alias] from [TableName]
12 май 04, 12:43    [673449]     Ответить | Цитировать Сообщить модератору
 запрос-найти количество продавцов  [new]
vlad_707
Member

Откуда:
Сообщений: 470
вот ещё вопросик
как найти количество продавцов?
по граберу делается так:
SELECT count (distinct SNUM)
FROM Orders

в аксессе такое не прокатывает, так же как
SELECT count (*)
FROM Orders
12 май 04, 12:43    [673450]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
vlad_707
Member

Откуда:
Сообщений: 470
Hummer
я не понял тебя.
мне нужно найти сумму проданного каждым продавцом и взять максимальное значение одним запросом
12 май 04, 12:48    [673459]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
RustamSaf
Member

Откуда: Москва
Сообщений: 123
кол-во продавцов примерно так.

SELECT count(snum) AS Выражение1
FROM (select distinct snum from orders)
12 май 04, 12:59    [673497]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Hummer
Member

Откуда:
Сообщений: 2583
2 vlad_707
Я написал просто через макс - соответсвенно вместо TableName может быть подзапрос с суммой продаж по продавцам.
12 май 04, 12:59    [673499]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
vlad_707
Member

Откуда:
Сообщений: 470
А без подзапросов никак ??? у Грабера делается одним
П.С. по Граберу до подзапросов я ещё не дошёл
с подзапросами понятно....
12 май 04, 13:08    [673534]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Serge I
Member

Откуда: Ростов-на-Дону
Сообщений: 484
Максимум могут иметь несколько продавцов. Поэтому лучше так:

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)
12 май 04, 13:14    [673566]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Serge I
Member

Откуда: Ростов-на-Дону
Сообщений: 484
ЗЫ. Потренироваться в написании запросов можно здесь:

http://sql.ipps.ru

или сразу

http://sql.ipps.ru/exercises.php
12 май 04, 14:21    [673781]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
vlad_707
Member

Откуда:
Сообщений: 470
-)) спасибо.., если б за это ещё з.п. платили-)
12 май 04, 15:01    [673899]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
Ба! Какие люди нас посетили! :)
2 Serge I - пламенный привет!
12 май 04, 18:09    [674563]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Serge I
Member

Откуда: Ростов-на-Дону
Сообщений: 484
To VIG
Так вот вы где пропадаете.
А я все жду писем.:-)
12 май 04, 18:21    [674600]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
Ну "пропадаете" это громко сказано, так , заглядываю иногда на огонек :)
12 май 04, 19:50    [674801]     Ответить | Цитировать Сообщить модератору
 Re: Связанные подзапроы  [new]
vlad_707
Member

Откуда:
Сообщений: 470
продолжаю изучение Мартина Грабера. появился новый вопрос:
Тема СВЯЗАННЫЕ ПОДЗАПРОСЫ
из теории:
вот способ найти всех заказчиков в Заказах на 3-е октября :

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

Я проверяю... запрос пишет ошибки на алиасах...-(....
хм... меняю имена алиасов на "a" , "b"
запрос выводится пустым....
хотя должен выводить 4 записи
Вопрос чё не так в аксессе ?????????
14 май 04, 11:38    [678163]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
inner - зарезервированное слово!!!

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

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

И не всех на 3 октября, а всех на 3 октября 1990 года
14 май 04, 11:47    [678208]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
vlad_707
Member

Откуда:
Сообщений: 470
хм..... в книге указано, как я писал исходно...
ранее пробовал такой запрос,тоже думал,что не понимает как дату...
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#));

Что не так во связанном ???
14 май 04, 12:11    [678328]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
#10/03/1990# - 3 октября (3 октября Гендальф дрался с назгулами на Заверети :) )
#03/10/1990# - 10 марта

что-то не так с данными, может их вбили не совсем корректно?
14 май 04, 12:18    [678357]     Ответить | Цитировать Сообщить модератору
 подстава?????  [new]
vlad_707
Member

Откуда:
Сообщений: 470
тогда я что то не понимаю....
данные таблицы
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#.... и выдаёт нужный результат.....
это что, подстава??????????????????????????????????
14 май 04, 12:44    [678480]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
автор
причём, когда в конструкторе запросов на условие пишешь 10.03.1990 в SQL строке аксесс записывает #03/10/1990#.... и выдаёт нужный результат.....
это что, подстава??????????????????????????????????


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

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

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

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

Удачи!
14 май 04, 12:49    [678507]     Ответить | Цитировать Сообщить модератору
 Re: запрос-найти максимального из группы  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
автор в другом топике писал:
Господа модераторы. Может мой топик "запрос-найти максимального из группы"
переименовать в "Грабли Мартина в аксессе". я туда скидываю все вопросы,которые не получаются выполнить в аксессе по этой книге.
Мартин Грабер "Введение в SQL".

Переименовываю.
14 май 04, 12:55    [678537]     Ответить | Цитировать Сообщить модератору
 Re: Грабли Мартина в аксессе (запрос-найти максимального из группы)  [new]
(c)VIG
Member

Откуда:
Сообщений: 1507
2 paparone
Не америкосы , а американцы. (Тут ,слава богу ,не ПТ а профессиональный форум).
А в остальном все правильно.
14 май 04, 14:37    [679139]     Ответить | Цитировать Сообщить модератору
 Re: Грабли Мартина в аксессе (запрос-найти максимального из группы)  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
2 VIG

Ок - учту
14 май 04, 15:59    [679516]     Ответить | Цитировать Сообщить модератору
 Запрос на изменение  [new]
vlad_707
Member

Откуда:
Сообщений: 470
Такого примера я не нашёл в Грабере (может я пока слеп)
есть таблица 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
)
17 май 04, 17:27    [682955]     Ответить | Цитировать Сообщить модератору
 Re: Грабли Мартина в аксессе (запрос-найти максимального из группы)  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
Что-то подобное несколько раз пробегало

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

Выход - заносить результат во временную таблицу и только потом Update поля c
17 май 04, 17:33    [682970]     Ответить | Цитировать Сообщить модератору
 Re: Грабли Мартина в аксессе (запрос-найти максимального из группы)  [new]
vlad_707
Member

Откуда:
Сообщений: 470
на 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);
Что тут нужно ещё подшаманить?? и как бы всётаки записать одним запросом или как-нибудь вообще
17 май 04, 17:58    [683015]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить