访问字段列表中的嵌套 select

Access nested select in field listing

有人向我提供了在数据库中搜索某些数据的查询,如下所示:

select nvl(to_char(a.empresa), 'SEM REMESSA') empresa,
      c.conta,
       nvl(sum(a.valor_total), 0) as folha,
       (select count(distinct(l2.creditado))
          from lancamentos l2
         inner join vw_arquivos a2
            on l2.arquivo = a2.arquivo
         where a2.empresa = a.empresa) as funcionarios
  from conta_table c
  left join vw_arquivos a
    on c.conta = a.conta
   and a.situacao = 6
  group by a.empresa, c.conta

我必须获取操作 folha / funcionarios 的值,但如果我将其放入字段列表中,我会收到错误消息:

ORA-00904: "FUNCIONARIOS": invalid identifier
00904. 00000 -  "%s: invalid identifier"

并且当我将对 funcionarios 的引用替换为相同的嵌套 select 时,我在引用 folha.

时遇到相同的错误

我知道我可以用它们各自的计算替换两个引用,而且它有效。像这样:

nvl(sum(a.valor_total), 0) / 
(select count(distinct(l2.creditado))
          from lancamentos l2
         inner join vw_arquivos a2
            on l2.arquivo = a2.arquivo
         where a2.empresa = a.empresa) as division

但这看起来不是那么优化,也不是最好的方法。所以我的问题是... 有什么方法可以通过最后的除法运算 select 这些值,但比重复 folhafuncionarios 计算更优化?也许是一种引用这些已经计算出的值的方法。

folhafuncionarios 不能在同一查询中引用,因为它们是别名。您必须将整个查询作为子查询,并进行除法,如下所示:

select empresa, conta, folha/funcionarios folha_div_funcionarios
from (
  select nvl(to_char(a.empresa), 'SEM REMESSA') empresa,
        c.conta,
         nvl(sum(a.valor_total), 0) as folha,
         (select count(distinct(l2.creditado))
            from lancamentos l2
           inner join vw_arquivos a2
              on l2.arquivo = a2.arquivo
           where a2.empresa = a.empresa) as funcionarios
    from conta_table c
    left join vw_arquivos a
      on c.conta = a.conta
     and a.situacao = 6
    group by a.empresa, c.conta
)