|
помогите создать view
|
|||
---|---|---|---|
#18+
есть таблица, допустим 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 | заранее благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2004, 09:57 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6.
??? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2004, 17:13 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
Хмм IMHO этот скриптик глюкав. И по синтаксису и по результату. Может автор ответа еще подумает и запостит исправления ??? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2004, 22:25 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
автор ответа молчит, а failure, тем временем, сидит без представления Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2004, 09:06 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
что такое "test" не пойму,,, ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2004, 10:08 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
)а ну да, это же таблица спасибо, скрипт работает!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2004, 10:11 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
пожалуйста :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2004, 10:34 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
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) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2004, 18:24 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
а можно усложнить вопрос? если допустим, надо подсчитывать накапливающий итог не с первой записи, а с произвольной, допустим по условию a>=3. Причём в записи при a=3 должны быть значения b и c из основоной таблицы, а накапливающий итог подсчитывать начиная с этой записи. какое условие добавить? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2004, 09:15 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
уже решил эту проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2004, 09:44 |
|
помогите создать view
|
|||
---|---|---|---|
#18+
СтОит признать, что вариант 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 Сказывается отсутствие группировки... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2004, 11:22 |
|
|
start [/forum/topic.php?fid=53&msg=32474344&tid=2007904]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 341ms |
total: | 475ms |
0 / 0 |