Конференция "Базы" » Сгруппировать объединение... [FB 1.5]
 
  • Александр Т © (21.02.11 10:24) [0]
    ___FB 1.5.5___

    Две таблицы с идентичными полями. В обеих нужно сделать выборки, обе выборки объединить и сгруппировать по каким-то полям.
    Решил двумя процедурами, причем вторая вызывает первую:

    create procedure Proc1 returns (<набор полей>)
    begin
     for select <набор полей> from Таблица 1
       where "Условия 1"
     into <:набор полей>
     do
       Suspend;

     for select <набор полей> from Таблица 2
       where "Условия 2"
     into <:набор полей>
     do
       Suspend;
    end

    create procedure Proc2 returns (<набор полей>)
    begin
     for select <набор полей> from Proc1    
     into <:набор полей>
     GROUP BY "Поля группировки"
     do
       Suspend;
    end



    В общем-то работает...
    Одно не нравится: как-то громоздко и если первая процедура выполняется, например за 16 мс, то вторая - за 400 с лишним.
    Оно вроде понятно, первая работает по в меру индексированным полям, а вторая с хаотичным набором данных.

    Но возможно ли как-то покрасивше ? :)
  • clickmaker © (21.02.11 11:12) [1]
    > обе выборки объединить

    а в FB union нету?
  • Александр Т © (21.02.11 12:57) [2]

    > а в FB union нету?

    Ну как же нету :)
    И даже order by для результирующего набора дозволяет...
    А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
  • sniknik © (21.02.11 13:07) [3]
    > А вот group by - фиг. Впрочем, если ошибаюсь, буду только рад :)
    ошибаешься, не работал с FB но в еще IB 6.5 группировка была. рад?
  • Александр Т © (21.02.11 13:16) [4]

    > еще IB 6.5 группировка была. рад?

    Еще нет...

    select Pole1 from Table1
    union
    select Pole_тоже_1 from Table2

    group by Pole1


    Так, что ли?

    Я ж не про group by вообще, а применительно к union-у
  • Sergey13 © (21.02.11 14:11) [5]
    > [0] Александр Т ©   (21.02.11 10:24)

    Сделай вьюху с union-ом, а по ней уже group by.

    > Две таблицы с идентичными полями.

    99% что недоработка в проектировании БД.
  • sniknik © (21.02.11 14:37) [6]
    > Так, что ли?
    > Я ж не про group by вообще, а применительно к union-у
    примерно...
    group by 1


    попробуй, или 0 смотря с чего там нумерация.
  • Александр Т © (21.02.11 14:46) [7]

    примерно...
    group by 1

    да она по-любому будет только второй select группировать
  • Александр Т © (21.02.11 14:54) [8]

    > Сделай вьюху с union-ом

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

    Н-да, однако 99% что недоработка в проектировании БД.
  • sniknik © (21.02.11 16:50) [9]
    подзапросов тоже нет? -

    SELECT Pole1, Count(*) AS Cnt  FROM (
     SELECT Pole1 FROM Table1
     UNION ALL
     SELECT Pole2 FROM Table2
    )
    GROUP BY Pole1



    (могут быть вариации в синтаксисе)
  • Sergey13 © (21.02.11 17:32) [10]
    > [8] Александр Т ©   (21.02.11 14:54)
    > Разве что во вьюхе обе таблицы вместе слить, а уже по общей каше делать отбор и группировку...

    Именно. Только Union All не забудь.

    > [9] sniknik ©   (21.02.11 16:50)

    Не умеет ФБ1.5 делать select from select
  • Игорь Шевченко © (21.02.11 18:34) [11]

    > Не умеет ФБ1.5 делать select from select


    зато умеет view
  • Александр Т © (22.02.11 04:02) [12]
    >to all
    Спасибо :).
 
Конференция "Базы" » Сгруппировать объединение... [FB 1.5]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]