[그림깨짐 수정완료] 부속질의 관련해서 질문드립니다 0 2 1,942

by DB새싹이 [Oracle 기초] ORACLE 부속질의 [2020.06.19 16:55:32]


제가 찾고자 하는건 "댓글이 가장 많이 달린 게시글의 태그명은 무엇인가?" 입니다. 그래서 먼저 댓글이 가장 많이 달린 게시글 인덱스를 찾았습니다.

-----------------------------------------------------------

SELECT DOCUMENTS_SRL
FROM (
    SELECT COMMENTS.DOCUMENTS_SRL, COUNT(*) AS COMMENTS_NUM
    FROM COMMENTS
    GROUP BY COMMENTS.DOCUMENTS_SRL )
WHERE ROWNUM = 1
ORDER BY COMMENTS_NUM DESC

---------------------------------------------------------

저 쿼리를 단독으로 실행하면

  DOCUMENTS_SRL
1 1

이 나옵니다.

 

그리고 그 부속질의 밖에 이 게시글 인덱스를 만족하는 태그명을 찾았습니다.

-----------------------------------------------------------

SELECT TAGS.NAME
FROM DOCUMENTS, TAGS
WHERE DOCUMENTS.DOCUMENTS_SRL IN (
    SELECT DOCUMENTS_SRL
    FROM (
        SELECT COMMENTS.DOCUMENTS_SRL, COUNT(*) AS COMMENTS_NUM
        FROM COMMENTS
        GROUP BY COMMENTS.DOCUMENTS_SRL )
    WHERE ROWNUM = 1
    ORDER BY COMMENTS_NUM DESC)
AND
DOCUMENTS.TAG = TAGS.TAGS_SRL;

-----------------------------------------------------------

근데 ORA-00907: missing right parenthesis 라는 오류가 뜹니다.

너무 황당해서 직접 부속질의에 '1'을 넣어봤습니다.

-------------------

SELECT TAGS.NAME
FROM DOCUMENTS, TAGS
WHERE DOCUMENTS.DOCUMENTS_SRL IN ('1')
AND
DOCUMENTS.TAG = TAGS.TAGS_SRL;

-------------------

결과는

  NAME
1 공부

잘 나옵니다.

여기까지 했는데 뭐가 잘못인지 잘 모르겠습니다... 문법 오류도 초보자의 눈에는 없는거 같습니다

조금만 가르쳐주시면 감사하겠습니다.

 

 

by pajama [2020.06.20 23:49:10]

서브쿼리에 order by가 있어서 00907 오류가 발생합니다. row_number 함수를 쓰시는 것도 방법일듯하네요.


by 마농 [2020.06.22 09:06:57]

애초에 order by 의 위치가 잘못이네요.
group by 밖이 아닌 안에 넣어야 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입