Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

nar (статус: Посетитель), 25 мая 2011, 12:10 [#1]:

спс. еще не пробовал, но согласен, смысл понял, только вот будет ли он быстрее работать чем 2 по отдельности
6ruse

6ruse (статус: 1-ый класс), 25 мая 2011, 12:23 [#2]:

можно протестить в ibExpertе, а вообще от количества данных все зависит
nar

nar (статус: Посетитель), 25 мая 2011, 12:31 [#3]:

Данные очень большое количество, индекса ко всем полям я не могу прописать,( запросы на выборку нужны намного реже),а индекс слишком тормозит вставку и обновление записей, особенно когда вставляет 1 запрос около 1000 записей или обновляются около 5000 тыс или 10000 тыс одним запросам
nar

nar (статус: Посетитель), 25 мая 2011, 12:39 [#4]:

нет данный запрос, время не уменьшил, все ровно время ровно двум запросам, фактически это те же два запроса, выполняемые по отдельности...
а нельзя как-то в запросе объеденить одинаковые условие, а уже по разным сгруппировать результат?
6ruse

6ruse (статус: 1-ый класс), 25 мая 2011, 12:48 [#5]:

ну покури тогда group
6ruse

6ruse (статус: 1-ый класс), 25 мая 2011, 12:49 [#6]:

10 000 это не много даже 100 000 это не много, много 1 000 000 000, и больше, вот тогда да!!!
nar

nar (статус: Посетитель), 25 мая 2011, 17:15 [#7]:

10 тыс одним запросам, но я не сказал что этот запрос 1 раз в сутки)) запросы без конечные их может быть в 1 минуту 1 а может быть 30...(( кароче индекса создавать я точно не буду, мы уже пробовали проиндексировать кое какие поля, в итоге работа клиента (отчеты и т.д.) заметно улучшилась, а вот работа программы на сервере, которая именно вставляет обновляет записи заметно начала тормозить
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 мая 2011, 17:27 [#8]:

Цитата (nar):

только вот будет ли он быстрее работать чем 2 по отдельности

нет не будет - по сути это те же два запроса

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.