Сколько раз считается выражение 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

Выражение выполнится три раза.

  1. Выражение t.col + 1 вычисляется один раз для вычисления значения столбца first.
  2. Выражение t.col + 1 вычисляется еще раз для вычисления значения столбца second.
  3. Выражение 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 - три раза.

→ Ссылка