Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вложенное агрегирование в Access - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Вложенное агрегирование в Access
ikki Дата: Пятница, 29.03.2013, 08:55 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
всем привет.
задача не срочная, но захотелось разобраться.

ноги темы растут отсюда: http://www.excelworld.ru/forum/2-4215-1

насколько я понимаю, нужно использовать сначала отбор по сумме платежей, а потом - посчитать количество уникальных клиентов.
с одним отбором (платежная система - "наличные") и группировкой по месяцам.
у меня пока получилось решить задачу с помощью промежуточного запроса.

промежуточный:
[vba]
Код
SELECT Format(pdate,"mmm\.yyyy") AS pMonth, name, Sum(pSum) AS pmnSum
FROM sales
WHERE pSystem="наличные"
GROUP BY Format(pdate,"mmm\.yyyy"), name
HAVING Sum(pSum)>300;
[/vba]

итог:
[vba]
Код
SELECT pMonth, Count(name) AS [Count-name]
FROM Запрос1
GROUP BY pMonth;
[/vba]

вопрос: можно ли обойтись одним запросом? (методом тыка у меня ничего не получается)
ни COUNT(SUM(...)), ни как-то ещё.
вообще есть сомнения, так как агрегатные функции применяются к разным полям.

если можно - то ещё оин вопрос: стоит ли это делать?
или способ с промежуточным запросом можно назвать оптимальным?

прикладываю архив БД (mdb, Access 2002)
К сообщению приложен файл: db2.rar (10.2 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Пятница, 29.03.2013, 09:03
 
Ответить
Сообщениевсем привет.
задача не срочная, но захотелось разобраться.

ноги темы растут отсюда: http://www.excelworld.ru/forum/2-4215-1

насколько я понимаю, нужно использовать сначала отбор по сумме платежей, а потом - посчитать количество уникальных клиентов.
с одним отбором (платежная система - "наличные") и группировкой по месяцам.
у меня пока получилось решить задачу с помощью промежуточного запроса.

промежуточный:
[vba]
Код
SELECT Format(pdate,"mmm\.yyyy") AS pMonth, name, Sum(pSum) AS pmnSum
FROM sales
WHERE pSystem="наличные"
GROUP BY Format(pdate,"mmm\.yyyy"), name
HAVING Sum(pSum)>300;
[/vba]

итог:
[vba]
Код
SELECT pMonth, Count(name) AS [Count-name]
FROM Запрос1
GROUP BY pMonth;
[/vba]

вопрос: можно ли обойтись одним запросом? (методом тыка у меня ничего не получается)
ни COUNT(SUM(...)), ни как-то ещё.
вообще есть сомнения, так как агрегатные функции применяются к разным полям.

если можно - то ещё оин вопрос: стоит ли это делать?
или способ с промежуточным запросом можно назвать оптимальным?

прикладываю архив БД (mdb, Access 2002)

Автор - ikki
Дата добавления - 29.03.2013 в 08:55
_Boroda_ Дата: Пятница, 29.03.2013, 10:20 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
В Аксе проще пути не вижу. Правда, невеликий я мастер сиквела, а уж тем более усеченного . Но если работать не в Аксе, а в нормальном сиквеле, то есть такая штука Count (DISTINCT поле). Вот с ней совсем другое дело.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ Аксе проще пути не вижу. Правда, невеликий я мастер сиквела, а уж тем более усеченного . Но если работать не в Аксе, а в нормальном сиквеле, то есть такая штука Count (DISTINCT поле). Вот с ней совсем другое дело.

Автор - _Boroda_
Дата добавления - 29.03.2013 в 10:20
ikki Дата: Пятница, 29.03.2013, 15:05 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
distinct я тоже пытался всунуть smile
методом научного тыка, опять же.
ругается.

ну да ладно.
Саша, спасибо за ответ.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеdistinct я тоже пытался всунуть smile
методом научного тыка, опять же.
ругается.

ну да ладно.
Саша, спасибо за ответ.

Автор - ikki
Дата добавления - 29.03.2013 в 15:05
ikki Дата: Пятница, 29.03.2013, 15:49 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (_Boroda_)
Он там не работает.

в смысле?
в агрегатных функциях?

в простых-то запросах вроде работает...
типа такого:
[vba]
Код
SELECT distinct
format(pdate,"mmm.yyyy"),sales.name
FROM sales;
[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Цитата (_Boroda_)
Он там не работает.

в смысле?
в агрегатных функциях?

в простых-то запросах вроде работает...
типа такого:
[vba]
Код
SELECT distinct
format(pdate,"mmm.yyyy"),sales.name
FROM sales;
[/vba]

Автор - ikki
Дата добавления - 29.03.2013 в 15:49
_Boroda_ Дата: Пятница, 29.03.2013, 16:24 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Цитата (ikki)
в смысле?

В смысле комбинация Count (DISTINCT название_поля) в Аксе не работает
Просто в Оракле должно работать что-то типа (на коленке пишу, без проверки - главное суть)
[vba]
Код
SELECT Format(pdate,"mmm\.yyyy") AS pMonth, name, Count (DISTINCT pSum) AS pmnSum
FROM sales
WHERE pSystem="наличные"
GROUP BY Format(pdate,"mmm\.yyyy")
HAVING Sum(pSum)>300;
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Цитата (ikki)
в смысле?

В смысле комбинация Count (DISTINCT название_поля) в Аксе не работает
Просто в Оракле должно работать что-то типа (на коленке пишу, без проверки - главное суть)
[vba]
Код
SELECT Format(pdate,"mmm\.yyyy") AS pMonth, name, Count (DISTINCT pSum) AS pmnSum
FROM sales
WHERE pSystem="наличные"
GROUP BY Format(pdate,"mmm\.yyyy")
HAVING Sum(pSum)>300;
[/vba]

Автор - _Boroda_
Дата добавления - 29.03.2013 в 16:24
ikki Дата: Суббота, 30.03.2013, 07:36 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
умгу. понял. вроде бы. smile


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеумгу. понял. вроде бы. smile

Автор - ikki
Дата добавления - 30.03.2013 в 07:36
Gustav Дата: Воскресенье, 31.03.2013, 00:22 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Можно вписать первый запрос внутрь второго и обойтись одним сохраненным запросом:
[vba]
Код
SELECT Запрос1.pMonth, Count(Запрос1.name) AS [Count-name]
FROM (
     SELECT Format(pdate,"mmm\.yyyy") AS pMonth, sales.name, Sum(sales.pSum) AS pmnSum
     FROM sales
     WHERE sales.pSystem="наличные"
     GROUP BY Format(pdate,"mmm\.yyyy"), sales.name
     HAVING Sum(sales.pSum)>300
)  AS Запрос1
GROUP BY Запрос1.pMonth
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеМожно вписать первый запрос внутрь второго и обойтись одним сохраненным запросом:
[vba]
Код
SELECT Запрос1.pMonth, Count(Запрос1.name) AS [Count-name]
FROM (
     SELECT Format(pdate,"mmm\.yyyy") AS pMonth, sales.name, Sum(sales.pSum) AS pmnSum
     FROM sales
     WHERE sales.pSystem="наличные"
     GROUP BY Format(pdate,"mmm\.yyyy"), sales.name
     HAVING Sum(sales.pSum)>300
)  AS Запрос1
GROUP BY Запрос1.pMonth
[/vba]

Автор - Gustav
Дата добавления - 31.03.2013 в 00:22
_Boroda_ Дата: Воскресенье, 31.03.2013, 02:38 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Цитата (Gustav)
Можно вписать первый запрос внутрь второго

Да это-то понятно. Только по сути это все равно 2 запроса - селекта-то два.
А вот как извратиться с одним селектом? Да еще так, чтобы в Аксе работал. Я, с моими не столь уж глубокими знаниями SQL, ничего придумать не смог. Да и зачем, собственно?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Цитата (Gustav)
Можно вписать первый запрос внутрь второго

Да это-то понятно. Только по сути это все равно 2 запроса - селекта-то два.
А вот как извратиться с одним селектом? Да еще так, чтобы в Аксе работал. Я, с моими не столь уж глубокими знаниями SQL, ничего придумать не смог. Да и зачем, собственно?

Автор - _Boroda_
Дата добавления - 31.03.2013 в 02:38
ikki Дата: Воскресенье, 31.03.2013, 03:36 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (_Boroda_)
Да и зачем, собственно?

хочу всё знать biggrin

чисто теоретически - если бы удалось сделать всё одним селект-ом, то, возможно, сервер мог бы составить более оптимальный план.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Цитата (_Boroda_)
Да и зачем, собственно?

хочу всё знать biggrin

чисто теоретически - если бы удалось сделать всё одним селект-ом, то, возможно, сервер мог бы составить более оптимальный план.

Автор - ikki
Дата добавления - 31.03.2013 в 03:36
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!