Сколько раз считается выражение PostgreSQL?
Подскажите, пожалуйста, сколько раз физически посчитается выражение t.col + 1
в этом запросе?
select t.col + 1 as first,
t.col + 1 as second,
case
when t.col + 1 = 10
then X
when t.col + 1 = 20
then Y
end as caseVal
from table
Ответы (2 шт):
Автор решения: Superproger77
→ Ссылка
Выражение выполнится три раза.
- Выражение
t.col + 1
вычисляется один раз для вычисления значения столбцаfirst
. - Выражение
t.col + 1
вычисляется еще раз для вычисления значения столбцаsecond
. - Выражение
t.col + 1
вычисляется третий раз в условном оператореcase
.
Автор решения: Мелкий
→ Ссылка
psql (18devel)
Type "help" for help.
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
8799
(1 row)
postgres=# with t as (select 1 as col, 5 as x, 6 as y)
select t.col + 1 as first,
t.col + 1 as second,
case
when t.col + 1 = 10
then X
when t.col + 1 = 20
then Y
end as caseVal
from t;
first | second | caseval
-------+--------+---------
2 | 2 |
(1 row)
gdb -p 8799
(gdb) break int4pl
Breakpoint 1 at 0x556c1f530651: file ../../../../src/include/postgres.h, line 204.
(gdb) c
Continuing.
Breakpoint 1, int4pl (fcinfo=0x556c1ffacba0) at int.c:794
794 int32 result;
(gdb) c
Continuing.
Breakpoint 1, int4pl (fcinfo=0x556c1ffacba0) at int.c:794
794 int32 result;
(gdb) c
Continuing.
Breakpoint 1, int4pl (fcinfo=0x556c1ffacba0) at int.c:794
794 int32 result;
(gdb) c
Continuing.
Breakpoint 1, int4pl (fcinfo=0x556c1ffacba0) at int.c:794
794 int32 result;
(gdb) c
Continuing.
Четыре раза при col != 9, при col = 9 - три раза.