Sql 别名在内部联接中不起作用

Sql 别名在内部联接中不起作用,sql,oracle,inner-join,Sql,Oracle,Inner Join,我试图为表factouring和内部联接中的表成员提供一个别名,以便在select中的子查询中使用它,如下所示 SELECT description, Avg((SELECT Count(*) FROM facturation F WHERE F.membreid = M.membreid)) FROM v_type_membre INNER JOIN v_membre M

我试图为表factouring和内部联接中的表成员提供一个别名,以便在select中的子查询中使用它,如下所示

    SELECT description,
       Avg((SELECT Count(*)
            FROM   facturation F
            WHERE  F.membreid = M.membreid))
FROM   v_type_membre
       INNER JOIN v_membre M
               ON v_type_membre.typeid = M.typeid
       INNER JOIN v_facturation
               ON M.membreid = v_facturation.membreid
GROUP  BY description
ORDER  BY description; 
为什么会出现错误:

Error at Command Line:3 Column:31
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

谢谢

您最初的问题是别名周围的引号。你不需要它们

类似地,您不需要相关子查询。您可以将查询编写为:

select description, avg(cnt*1.0) as avg_cnt
FROM v_type_membre INNER JOIN v_membre M
     ON v_type_membre.typeid = M.typeid INNER JOIN
     v_facturation
     ON M.membreid = v_facturation.membreid inner join
     (SELECT f.membreid, Count(*) as cnt
      FROM facturation F
      group by F.membreid
     ) cnt
     on cnt.membreid = M.membreid
GROUP  BY description
ORDER  BY description;  
除了对某些人来说更清晰之外,这还允许您包括最小值和最大值,或者如果需要,可以计算值为10和42的次数


我还添加了*1.0以将计数转换为浮点数。在某些数据库中,整数的平均值是整数,这可能不是您想要的。Oracle计算平均值是正确的,但我有这样做的习惯。

尝试将子选择移动到联接。我认为您不需要v_factoration联接,我需要更多信息,我猜v_*是一个视图

SELECT description, Avg(F.fact_cnt)
FROM   v_type_membre
       INNER JOIN v_membre AS M
               ON v_type_membre.typeid = M.typeid
--       INNER JOIN v_facturation
--               ON M.membreid = v_facturation.membreid
       INNER JOIN (SELECT membreid, Count(*) 'fact_cnt'
            FROM   facturation group by membreid) AS F
            ON  F.membreid = M.membreid
GROUP  BY description
ORDER  BY description;

抱歉,目前没有Oracle或任何其他数据库可用,这些都是在我的头脑中解析和编译的…

删除别名周围的引号。您指定了一个常量值而不是别名。是否也从from子句的表中删除了它?完成后,您应该在问题中编辑您的查询。谢谢!但我有另一个错误SQL错误:ORA-00904:F.MEMBREID:无效标识符。但我不明白,因为membreid是表构造的一个属性,甚至SQLDeveloper的intellisense也能识别它。错误在于连接标准。我换了f。与cnt…谢谢!你就是那个男人:别再犯错误了。最后一个问题是,为什么使用cnt作为计数别名和查询别名?没有特别的原因。我不想使用f,因为它指的是表。正常情况下,我可能会放一些类似fsum的东西,但在这个例子中,它是cnt。