но в предложении WITH всегда создается таблица, а не одно значение, как в моем случае.
A CTE всегда создает таблицу " ». Даже ваш CTE - так получилось, что ваш CTE всегда содержит ровно один столбец и одну строку.
Причиной ошибки является тот факт, что ваш последний запрос не ссылается на CTE с именем total
и поэтому не может получить к нему доступ (или к его столбцу).
Вам необходимо включить CTE total
в предложение from
вашего последнего оператора SELECT:
with total as (
select count(*) as emp_count
from employees
)
select emp_no, (cast (rank() over (order by emp_no) as Float)) / emp_count
from employees
cross join total;
Вы можете упростить выражение в конечном SELECT, если вы приведете считать до числа (или числа с плавающей запятой):
with total as (
select count(*)::float as emp_count
from employees
)
select emp_no,
rank() over (order by emp_no) / emp_count
from employees
cross join total;