Почему Select выдает меньше колонок чем в нем прописано?

Здравствуйте
Подскажите пожалуйста.
Есть запрос

with AAA(A) as (select 1 union select 2 union select 3 union select 4 union select 5)
select
'А01' as "id",
1 as "sensor",
generate_series('2021-07-01 00:00:00', '2021-07-31 23:59:59', '10 sec'::interval) as "time",
t.status[floor(random()* 4 + 1)::int] from (select array_agg(distinct AAA.A) as "status" from AAA ) as t ,
round((random()* 400 - 200)::numeric, 2) as "value"

в нем - должно выводиться 5 полей, но выводится только 4- последнего поля value почем то нет.
Если изменить порядок последних двух полей - и сделать status последним в перечне, тогда выводится все пять полей.
Но почему в том порядке что я написала выводиться на одно поле меньше? Не могу по туториалам найти в чем причина. Подскажите пожалуйста.
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Причина простая. Лапша вместо кода. Это и не позволяет понять, что есть что.

Отформатируем:

with AAA(A) as (
    select 1 union 
    select 2 union 
    select 3 union 
    select 4 union 
    select 5
)
select 'А01' as "id",
       1 as "sensor",
       generate_series('2021-07-01 00:00:00', '2021-07-31 23:59:59', '10 sec'::interval) as "time",
       t.status[floor(random()* 4 + 1)::int] 
from (select array_agg(distinct AAA.A) as "status" from AAA ) as t ,
     round((random()* 400 - 200)::numeric, 2) as "value"

Теперь сразу видно, что value не является полем выходного набора. Это алиас синтетической таблицы в секции FROM.

PS. За логику и даже просто за синтаксическую корректность я так и вовсе молчу...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы