powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите создать view
11 сообщений из 11, страница 1 из 1
помогите создать view
    #32471581
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица, допустим
a | b | c |
-------------
1 | 2 | 3 |
2 | 4 | 5 |
3 | 6 | 7 |
мне надо написать представление, чтобы для каждого значения поля -a- выдало сумму значений по остальным полям от первой записи до текущей
т.е.
a | b | c |
-----------------
1 | 2 | 3 |
2 | 6 | 8 |
3 | 12 |15 |
заранее благодарен
...
Рейтинг: 0 / 0
помогите создать view
    #32472487
CM Hungry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
select 
 a,
 (select sum(b) from table t1 where t1.a<=t.a) as b,
 (select sum(c) from table t1 where t1.a<=t.a) as c
from table t
order by a


???
...
Рейтинг: 0 / 0
помогите создать view
    #32472834
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм IMHO этот скриптик глюкав. И по синтаксису и по результату.
Может автор ответа еще подумает и запостит исправления ??? ;)
...
Рейтинг: 0 / 0
помогите создать view
    #32472997
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор ответа молчит,
а failure, тем временем, сидит без представления

Код: plaintext
select t1.a, sum(t2.b), sum(t2.c) from test t1, test t2 where t2.a<=t1.a group by t1.a;
...
Рейтинг: 0 / 0
помогите создать view
    #32473106
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что такое "test" не пойму,,,
...
Рейтинг: 0 / 0
помогите создать view
    #32473111
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
)а ну да, это же таблица
спасибо, скрипт работает!!!
...
Рейтинг: 0 / 0
помогите создать view
    #32473164
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пожалуйста :)
...
Рейтинг: 0 / 0
помогите создать view
    #32474344
CM Hungry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shweik:

синтаксис, допустим, не самый красивый
результат - правильный, имхо


db=# create table ttt(a int, b int, c int);
CREATE TABLE
db=# insert into ttt values(1, 2, 3);
INSERT 248305 1
db=# insert into ttt values(2, 4, 5);
INSERT 248306 1
db=# insert into ttt values(3, 6, 7);
INSERT 248307 1
db=# select a, (select sum(b) from ttt t2 where t2.a <= t.a) as b, (select sum(c) from ttt t2 where t2.a<=t.a) as c from ttt t order by a;
a | b | c
---+----+----
1 | 2 | 3
2 | 6 | 8
3 | 12 | 15
(3 rows)
db=# explain
db-# select a, (select sum(b) from ttt t2 where t2.a <= t.a) as b, (select sum(c) from ttt t2 where t2.a<=t.a) as c from ttt t order by a;
QUERY PLAN
-----------------------------------------------------------------------------
Sort (cost=69.83..72.33 rows=1000 width=4)
Sort Key: a
-> Seq Scan on ttt t (cost=0.00..20.00 rows=1000 width=4)
SubPlan
-> Aggregate (cost=23.33..23.33 rows=1 width=4)
-> Seq Scan on ttt t2 (cost=0.00..22.50 rows=333 width=4)
Filter: (a <= $0)
-> Aggregate (cost=23.33..23.33 rows=1 width=4)
-> Seq Scan on ttt t2 (cost=0.00..22.50 rows=333 width=4)
Filter: (a <= $0)
(10 rows)

db=# create index ttt_a_idx on ttt(a);
CREATE INDEX
db=# explain
db-# select a, (select sum(b) from ttt t2 where t2.a <= t.a) as b, (select sum(c) from ttt t2 where t2.a<=t.a) as c from ttt t order by a;
QUERY PLAN
--------------------------------------------------------------------------
Sort (cost=1.05..1.06 rows=3 width=4)
Sort Key: a
-> Seq Scan on ttt t (cost=0.00..1.03 rows=3 width=4)
SubPlan
-> Aggregate (cost=1.04..1.04 rows=1 width=4)
-> Seq Scan on ttt t2 (cost=0.00..1.04 rows=1 width=4)
Filter: (a <= $0)
-> Aggregate (cost=1.04..1.04 rows=1 width=4)
-> Seq Scan on ttt t2 (cost=0.00..1.04 rows=1 width=4)
Filter: (a <= $0)
(10 rows)
db=# explain
db-# select t1.a, sum(t2.b), sum(t2.c) from ttt t1, ttt t2 where t2.a<=t1.a group by t1.a;
QUERY PLAN
-------------------------------------------------------------------------------
Aggregate (cost=4.26..4.29 rows=1 width=16)
-> Group (cost=4.26..4.27 rows=3 width=16)
-> Sort (cost=4.26..4.26 rows=3 width=16)
Sort Key: t1.a
-> Nested Loop (cost=0.00..4.23 rows=3 width=16)
Join Filter: ("inner".a <= "outer".a)
-> Seq Scan on ttt t1 (cost=0.00..1.03 rows=3 width=4)
-> Seq Scan on ttt t2 (cost=0.00..1.03 rows=3 width=12)
(8 rows)
...
Рейтинг: 0 / 0
помогите создать view
    #32474797
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно усложнить вопрос?
если допустим, надо подсчитывать накапливающий итог не с первой записи, а
с произвольной, допустим по условию a>=3. Причём в записи при a=3 должны быть значения b и c из основоной таблицы, а накапливающий итог подсчитывать начиная с этой записи.
какое условие добавить?
...
Рейтинг: 0 / 0
помогите создать view
    #32474853
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже решил эту проблему
...
Рейтинг: 0 / 0
помогите создать view
    #32475064
Konrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтОит признать, что вариант CM Hungry работает эффективнее (быстрее):

explain analyse select t1.a, sum(t2.b), sum(t2.c) from test t1, test t2 where t2.a<=t1.a group by t1.a order by t1.a;
NOTICE: ПЛАН ЗАПРОСА:

Aggregate (cost=66623.35..69123.35 rows=33333 width=16) (actual time=10866.77..16623.74 rows=1000 loops=1)
-> Group (cost=66623.35..67456.69 rows=333333 width=16) (actual time=10866.73..15875.18 rows=500500 loops=1)
-> Sort (cost=66623.35..66623.35 rows=333333 width=16) (actual time=10866.70..14604.44 rows=500500 loops=1)
-> Nested Loop (cost=0.00..32520.00 rows=333333 width=16) (actual time=0.03..4748.79 rows=500500 loops=1)
-> Seq Scan on test t1 (cost=0.00..20.00 rows=1000 width=4) (actual time=0.01..3.55 rows=1000 loops=1)
-> Seq Scan on test t2 (cost=0.00..20.00 rows=1000 width=12) (actual time=0.00..2.58 rows=1000 loops=1000)
Total runtime: 16654.13 msec



explain analyse select a, (select sum(b) from test t2 where t2.a <= t.a) as b, (select sum(c) from test t2 where t2.a<=t.a) as c from test t order by a;
NOTICE: ПЛАН ЗАПРОСА:

Sort (cost=69.83..69.83 rows=1000 width=4) (actual time=4814.56..4815.15 rows=1000 loops=1)
-> Seq Scan on test t (cost=0.00..20.00 rows=1000 width=4) (actual time=2.32..4811.78 rows=1000 loops=1)
SubPlan
-> Aggregate (cost=23.33..23.33 rows=1 width=4) (actual time=2.37..2.37 rows=1 loops=1000)
-> Seq Scan on test t2 (cost=0.00..22.50 rows=333 width=4) (actual time=0.00..1.79 rows=500 loops=1000)
-> Aggregate (cost=23.33..23.33 rows=1 width=4) (actual time=2.43..2.43 rows=1 loops=1000)
-> Seq Scan on test t2 (cost=0.00..22.50 rows=333 width=4) (actual time=0.00..1.84 rows=500 loops=1000)
Total runtime: 4816.08 msec

Сказывается отсутствие группировки...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите создать view
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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