Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Итоговая строка в Select`e / 5 сообщений из 5, страница 1 из 1
07.04.2008, 09:42
    #35238683
voprossss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая строка в Select`e
Есть запрос вида с итогом по строкам...
Select Name,f1,f2,f3, Sum(f1+f2+f3)
...
Group By Name,f1,f2,f3

надо еще и снизу итог по полям добавить
сделал так:
добавил

Union All
Select null,Sum(f1),Sum(f2),Sum(f3), Sum(f1+f2+f3)
...
Group By 1

тоесть тот же запрос, но с общей суммой

можно ли как нибудь проще (лучше и т.д :-)) это сделать? а то получается что практически один и тот же запрос 2 раза выполняется и время выполнения в двое выше
...
Рейтинг: 0 / 0
07.04.2008, 11:18
    #35238993
otvwetttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая строка в Select`e
select
tbl.*,
tbl.s1+tbl.s2+tbl.s3 as itog
from (
Select null,Sum(f1) as s1 ,Sum(f2) as s2 ,Sum(f3) as s3
) tbl
...
Рейтинг: 0 / 0
07.04.2008, 11:20
    #35239001
otvwetttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая строка в Select`e
Чета походу я не правильно вопрос понял... :)
...
Рейтинг: 0 / 0
07.04.2008, 11:59
    #35239139
Итоговая строка в Select`e
voprossssЕсть запрос вида с итогом по строкам...
Select Name,f1,f2,f3, Sum(f1+f2+f3)
...
Group By Name,f1,f2,f3

надо еще и снизу итог по полям добавить
сделал так:
добавил

Union All
Select null,Sum(f1),Sum(f2),Sum(f3), Sum(f1+f2+f3) as summ
...
Group By 1

тоесть тот же запрос, но с общей суммой

можно ли как нибудь проще (лучше и т.д :-)) это сделать? а то получается что практически один и тот же запрос 2 раза выполняется и время выполнения в двое выше
Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select case pivot.rn when  1  then v.name end as name,
       case pivot.rn when  1  then v.f1 end as f1,
       case pivot.rn when  1  then v.f2 end as f2,
       case pivot.rn when  1  then v.f3 end as f3,
       sum(v.summ) as summ
 from ( 
        Select Name,f1,f2,f3,  Sum(f1+f2+f3)
        ...
         Group By Name,f1,f2,f3
      ) v
cross join 
      (select  1  as rn union all select  2  as rn) pivot
 group by rn,
          case pivot.rn when  1  then v.name end,
          case pivot.rn when  1  then v.f1 end,
          case pivot.rn when  1  then v.f2 end,
          case pivot.rn when  1  then v.f3 end
 order by rn, name, f1, f2, f3
...
Рейтинг: 0 / 0
07.04.2008, 12:01
    #35239150
Итоговая строка в Select`e
Как вариант... voprossssЕсть запрос вида с итогом по строкам...
Select Name,f1,f2,f3, Sum(f1+f2+f3)
...
Group By Name,f1,f2,f3

надо еще и снизу итог по полям добавить
сделал так:
добавил

Union All
Select null,Sum(f1),Sum(f2),Sum(f3), Sum(f1+f2+f3) as summ
...
Group By 1

тоесть тот же запрос, но с общей суммой

можно ли как нибудь проще (лучше и т.д :-)) это сделать? а то получается что практически один и тот же запрос 2 раза выполняется и время выполнения в двое выше
Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select case pivot.rn when  1  then v.name end as name,
       case pivot.rn when  1  then v.f1 end as f1,
       case pivot.rn when  1  then v.f2 end as f2,
       case pivot.rn when  1  then v.f3 end as f3,
       sum(v.summ) as summ
 from ( 
        Select Name,f1,f2,f3, Sum(f1+f2+f3) 
        ...
         Group By Name,f1,f2,f3
      ) v
cross join 
      (select  1  as rn union all select  2  as rn) pivot
 group by rn,
          case pivot.rn when  1  then v.name end,
          case pivot.rn when  1  then v.f1 end,
          case pivot.rn when  1  then v.f2 end,
          case pivot.rn when  1  then v.f3 end
 order by rn, name, f1, f2, f3

Выделенное читать как:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select case pivot.rn when  1  then v.name end as name,
       case pivot.rn when  1  then v.f1 end as f1,
       case pivot.rn when  1  then v.f2 end as f2,
       case pivot.rn when  1  then v.f3 end as f3,
       sum(v.summ) as summ
 from ( 
        Select Name,f1,f2,f3, Sum(f1+f2+f3) as summ
        ...
         Group By Name,f1,f2,f3
      ) v
cross join 
      (select  1  as rn union all select  2  as rn) pivot
 group by rn,
          case pivot.rn when  1  then v.name end,
          case pivot.rn when  1  then v.f1 end,
          case pivot.rn when  1  then v.f2 end,
          case pivot.rn when  1  then v.f3 end
 order by rn, name, f1, f2, f3
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Итоговая строка в Select`e / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]