2017-04-07 8 views
1

내 테이블의 구조는 다음과 같이이다나는 사용자가 가장 평가 영화를 결정하기로 상관 계수를 선택하는 쿼리를 작성하기 위해 노력하고있어

:

enter image description here

내 질문은 이것이다 :

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 

하지만 내가 w 무슨 짓을 한거야, 내가 괄호를 놓치지 않을 것을 확신 rong?

P.S : 나는 전문가가 아니에요 그리고 난 오라클 만 열 별칭 테이블 별칭 AS를 사용하지 않는

답변

2

을 이해하고 싶습니다. The select-list syntax은 선택적 AS을 보여줍니다. the table-reference syntax 않습니다. 라인에서

당신은

FROM cote AS n1 

(당신이 별칭에 사용할 수 있도록 예약 된 단어가 비록)이 AS 테이블 별칭으로 처리되고 강조; 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 
+0

"오라클은 만 열 별칭 테이블 별칭 그대로 사용하지 않습니다 강조 표시 줄에서 "오, 맙소사, 왜 지금은 때때로 내가 사용할 수있는 가끔은 이해할 수 있지만, 이상한 것은 그것을 받아들이는 다른 오라클 편집자입니다 ... 오라클은 큰 세상이며, 많은 시간을 설명해 주겠다. – napi15

+1

다른 편집자가 문제를 강조 표시하지 않았더라도 쿼리를 실행할 때 동일한 ORA-00907 오류가 발생했을 것이다. –

+0

네가 맞다. 질의를 실행할 때 "포로 (POW)"를 인식하지 못해 대신 POWER를 인식했기 때문이다. 오라클이 유니폼을 입지 않고 모든 버전에서 동일한 구문을 사용하는 것을 결코 이해하지 못했습니다. 힘들지는 않지만 혼란 스럽습니다. – napi15