
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.05.2004, 14:11:59
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Здравствуйте. Есть 2 связанные таблицы MAIN: ID,SUMMA,OBL,M_STATUS RES: ID,MAIN_ID,SUMMA,OBL,STATUS где внешний ключ RES.MAIN_ID=MAIN.ID M_STATUS,STATUS=1,2,3... OBL=1,2,3... ID - первичный ключ надо: сгруппировав по признаку OBL, получить следующее: OBL CNT0 SUM0 CNT01 SUM01 CNT02 SUM02 CNT11 SUM11 CNT12 SUM12 где CNT0 и SUM0 - count(MAIN.ID) и sum(MAIN.SUMMA) для всех M_STATUS CNT01 и SUM01 - count(MAIN.ID) и sum(MAIN.SUMMA) для M_STATUS=1 CNT02 и SUM02 - count(MAIN.ID) и sum(MAIN.SUMMA) для M_STATUS=2 ... CNT11 и SUM11 - count(RES.ID) и sum(RES.SUMMA) для STATUS=1 (M_STATUS - любой) CNT12 и SUM12 - count(RES.ID) и sum(RES.SUMMA) для STATUS=2 (M_STATUS - любой) спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.05.2004, 17:37:57
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Это общая схема для развёртки в горизонт Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.05.2004, 18:19:32
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
спасибо большое, про такую возможность даже не знал, выходя из положения другими средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.05.2004, 18:24:45
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Подскажите пожалуйста, хотяб схематично, вариант с ХП, так как с трудом представляю подобный вариант на ХП Спасибо за внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.05.2004, 18:54:16
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
проверил только что - схема с подзапросами не подходит, так как очень уж тяжёлая выборка получается (результатов небольшой выборки я не дождался). Таблица MAIN - примерно 100 000 строк, RES - ещё больше, подзапросов получается (по такой схеме) около 12 (!!!), а строк в результате прогнозируется около 30 000. В данный момент это всё реализовано связанными запросами на клиентской стороне, и выполнялось около 3х часов. Но пришлось в одном из подзапросов прилепить вместо таблицы выборку из VIEW-а, скорость упала раз в 10, поэтому и возник вопрос. PS. В большинстве подзапросов пары CNTxx, SUMxx получаются одним запросом. Спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.05.2004, 12:37:16
|
|||
|---|---|---|---|
|
|||
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
На базе такого небольшого размера запрос не может идти 3 часа, если правильно используются индексы + план запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.05.2004, 11:20:01
|
|||
|---|---|---|---|
|
|||
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Я бы попробовал: SELECT COUNT(*) AS CNT0, SUM(MAIN.SUMMA) AS SUM0, COUNT( CASE M_STATUS WHEN 1 THEN 1 ELSE 0 END ) AS CNT01, COUNT( CASE M_STATUS WHEN 1 THEN MAIN.SUMMA ELSE 0 END ) AS SUM01 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.05.2004, 17:58:58
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
>Valery Shiskin Большое спасибо за варианты решения. Я сделал всё "в лоб" на клиентской части, но привёдённое вами решение очень интересно, и, возможно, будет более эффективным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.06.2004, 11:06:09
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
>Valery Shiskin уточните пожалуйста, с какой версии Firebird появилось CASE у меня на 1.0 его к сожалению нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.06.2004, 11:50:42
|
|||
|---|---|---|---|
|
|||
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Можно обоитись без CASE, используя UDF. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.06.2004, 12:38:00
|
|||
|---|---|---|---|
Подскажите решение (запрос из 2х связанных таблиц) |
|||
|
#18+
Вариант с CASE или IIF подходит только для части запроса, поэтому попробовал сделать через хранимую процедуру то, что раньше на клиенте в лоб делалось (5 подзапросов на каждую запись запроса), так скорость получилась раз в 15-20 выше :) спасибо всем ответившим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=40&mobile=1&tid=1578428]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 372ms |

| 0 / 0 |
