|
Вопрос # 5 317/ вопрос открыт / |
|
Здравствуйте, эксперты!
Что-то я туплю ((
Как можно реализовать несколько запросов в одном с группировкой, по разным условиям))
Во написал))
Ща кину пример будет понятнее
Есть запрос типа
Select sum(summa) as sum_k from plat where (data>=’14.05.2011’) and (data<=’20.05.2011’) and (vid=’K’)
2 запрос
Select sum(summa) as summa from plat where (data>=’14.05.2011’) and (data<=’20.05.2011’) and (vid_pl=’967’)
Ну там еще есть условия, но они одинаковы, это я потом сам разберусь
Вот краткий привел пример, как можно сформировать в один запрос, учитывая что поля для выборки разные (vid=’K’) и (vid_pl=’967’)
Просто фактически запрос один и тот же отличается одним условием. Гонять два раза очень большим количестве записей в базе… не хочется…
Так как там еще около 3 одинаковых условий, и при выборке этот запрос выполняется 30сек ну а два запроса гонять это уже 60 сек ( при том что запрос почти тот же
база FierBird 1.5, на делфи 7
 |
Вопрос задал: nar (статус: Посетитель)
Вопрос отправлен: 25 мая 2011, 11:59
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: 6ruse
Здравствуйте, nar!
select
(Select sum(summa) as sum_k from plat where (data>=’14.05.2011’) and (data<=’20.05.2011’) and (vid=’K’)) as POLE1,
(Select sum(summa) as summa from plat where (data>=’14.05.2011’) and (data<=’20.05.2011’) and (vid_pl=’967’)) as POLE2
from RDB$DATABASE
пример для Firebird
 |
Ответ отправил: 6ruse (статус: 1-ый класс)
Время отправки: 25 мая 2011, 12:04
|
Ответ #2. Отвечает эксперт: Мережников Андрей
Здравствуйте, nar!
попробуйте так:
Select sum(case when (vid=’K’) then summa else 0 end) as sum_k,sum(case when (vid_pl=’967’) then summa else 0 end) from plat where (data>=’14.05.2011’) and (data<=’20.05.2011’)
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 25 мая 2011, 17:35
Оценка за ответ: 5
Комментарий к оценке: ой. спс. подкрутили под себя, время чуть больше 1 запроса.
фактически 2 запроса, по времени одного... вопрос решен.. спс
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 25 мая 2011, 17:27; участников в обсуждении: 3.
|
nar (статус: Посетитель), 25 мая 2011, 12:10 [#1]:
спс. еще не пробовал, но согласен, смысл понял, только вот будет ли он быстрее работать чем 2 по отдельности
|
|
6ruse (статус: 1-ый класс), 25 мая 2011, 12:23 [#2]:
можно протестить в ibExpertе, а вообще от количества данных все зависит
|
|
nar (статус: Посетитель), 25 мая 2011, 12:31 [#3]:
Данные очень большое количество, индекса ко всем полям я не могу прописать,( запросы на выборку нужны намного реже),а индекс слишком тормозит вставку и обновление записей, особенно когда вставляет 1 запрос около 1000 записей или обновляются около 5000 тыс или 10000 тыс одним запросам
|
|
nar (статус: Посетитель), 25 мая 2011, 12:39 [#4]:
нет данный запрос, время не уменьшил, все ровно время ровно двум запросам, фактически это те же два запроса, выполняемые по отдельности...
а нельзя как-то в запросе объеденить одинаковые условие, а уже по разным сгруппировать результат?
|
|
6ruse (статус: 1-ый класс), 25 мая 2011, 12:48 [#5]:
ну покури тогда group
|
|
6ruse (статус: 1-ый класс), 25 мая 2011, 12:49 [#6]:
10 000 это не много даже 100 000 это не много, много 1 000 000 000, и больше, вот тогда да!!!
|
|
nar (статус: Посетитель), 25 мая 2011, 17:15 [#7]:
10 тыс одним запросам, но я не сказал что этот запрос 1 раз в сутки)) запросы без конечные их может быть в 1 минуту 1 а может быть 30...(( кароче индекса создавать я точно не буду, мы уже пробовали проиндексировать кое какие поля, в итоге работа клиента (отчеты и т.д.) заметно улучшилась, а вот работа программы на сервере, которая именно вставляет обновляет записи заметно начала тормозить
|
|
Мережников Андрей (статус: Абитуриент), 25 мая 2011, 17:27 [#8]:
Цитата (nar):
только вот будет ли он быстрее работать чем 2 по отдельности
нет не будет - по сути это те же два запроса
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|