Медиана с Postgres 9.4 - Почему мой код не работает?

SELECT 
(users.created_at::timestamp - invitations.created_at::timestamp) as elapsed,
percentile_disc(0.50)
      WITHIN GROUP (ORDER BY elapsed) as median
 FROM invitations
 join users on users.id = invitations.user_id

Попытка выяснить среднее время ожидания между созданием приглашения и его принятием пользователем. Этот код генерирует ошибку:

ERROR: column "elapsed" does not exist.

Как я могу это починить?

1 ответ

Решение

Вы не можете использовать псевдоним на том же уровне, где вы его определяете. Вам нужно обернуть это в производную таблицу:

select elapsed, 
       percentile_disc(0.50) WITHIN GROUP (ORDER BY elapsed) as median
from (
  SELECT users.created_at::timestamp - invitations.created_at::timestamp as elapsed,
  FROM invitations
    join users on users.id = invitations.user_id
) t;
Другие вопросы по тегам