| 
| 
 | Вопрос # 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 по отдельности  нет не будет - по сути это те же два запроса
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |