我在 oracle Sql Developer 中的这个相关查询中做错了什么

What I am doing wrong in this correlation query in oracle SqlDevelopper

我正在尝试构建一个查询 select 相关系数以确定用户评价最高的电影

我的table的结构是这样的:

我的查询是这样的:

SELECT  
    user1, user2,
    ((psum - (sum1 * sum2 / n)) / sqrt((sum1sq - pow(sum1, 2.0) / n) * (sum2sq - pow(sum2, 2.0) / n))) AS r,
    n
FROM
    (SELECT 
         n1.idclient AS user1,
         n2.idclient AS user2,
         SUM(n1.cote) AS sum1,
         SUM(n2.cote) AS sum2,
         SUM(n1.cote * n1.cote) AS sum1sq,
         SUM(n2.cote * n2.cote) AS sum2sq,
         SUM(n1.cote * n2.cote) AS psum,
         COUNT(*) AS n
     FROM
         cote AS n1 // <---------- Editor is pointing a missing parenthese here with a red line 
    LEFT JOIN
        cote AS n2 ON n1.idfilm = n2.idfilm
    WHERE   
        n1.idclient > n2.idclient
    GROUP BY
        n1.idclient, n2.idclient) AS step1
ORDER BY
    r DESC, n DESC

但是我确信我没有漏掉一个括号,我做错了什么?

P.S : 我不是专家,想了解一下

Oracle 不允许您将 AS 用于 table 别名,只能用于列别名。 The select-list syntax shows an optional AS; the table-reference syntax 没有。

在您突出显示的行中

FROM cote AS n1

AS 被视为 table 别名(尽管它是一个保留字,因此您不能将其用作别名);然后它看到 n1 并且不知道它是什么意思。解析器似乎经常退回到猜测任何左括号应该已经关闭,在这种情况下紧接在 n1 标记之前,因为它可能已经完成了到目前为止解析的内容(我非常简化,当然);因此不是完全有用的错误消息。

所以您需要从所有三个使用它的地方删除 AS

SELECT  
        user1, user2,
        ((psum - (sum1 * sum2 / n)) / sqrt((sum1sq - pow(sum1, 2.0) / n) * (sum2sq - pow(sum2, 2.0) / n))) AS r,
        n
FROM
        (SELECT 
                n1.idclient AS user1,
                n2.idclient AS user2,
                SUM(n1.cote) AS sum1,
                SUM(n2.cote) AS sum2,
                SUM(n1.cote * n1.cote) AS sum1sq,
                SUM(n2.cote * n2.cote) AS sum2sq,
                SUM(n1.cote * n2.cote) AS psum,
                COUNT(*) AS n
        FROM
                cote n1
    LEFT JOIN
        cote n2
    ON
        n1.idfilm = n2.idfilm
        WHERE   
                n1.idclient > n2.idclient
    GROUP BY
        n1.idclient, n2.idclient) step1
ORDER BY
        r DESC,
        n DESC