rank over()이 안먹히는데 이유가 뭘까요..? 0 4 755

by 웹린이 [2021.06.24 08:57:06]


 

현재  게시판테이블에 있는 게시글들 전체를 rank함수를 사용하여 일자별로 묶어서 갯수를 세려고 하는데요!

아래와 같이 SQL문을 만들었는데요

SELECT rownum rn, RANK() OVER (PARTITION BY TB.등록일 ORDER BY TB.등록일) AS DAY_ID, TB.* FROM(
  SELECT 게시글제목, 작성자, DATE_FORMAT(등록시간,'%Y-%m-%d')AS 등록일 FROM 게시판테이블
) TB

등록시간이 datetime타입이여서 일자별로 묶어줘야하기때문에 DATE_FORMAT함수를 사용하여 YYYY-mm-dd 형식으로 출력하였고,

이를 partition by 로 묶어주었는데 자꾸만 DAY_ID 가 1로만 나옵니다

사용하는 DB는 큐브리드이고 rank 함수를 지원하는 부분 역시 확인하였는데요 

혹시 제가 어떤 부분을 간과하고 있는걸까요?

 

by 마농 [2021.06.24 09:24:10]

같은 일자 안에서는 등록일이 전부 동일하기 때문에 공동 1등 입니다.
정렬기준을 등록일이 아닌 등록시간으로 바꾸세요.
공동 순위가 아닌 유일번호를 원한다면? RANK 가 아닌 ROW_NUMBER 를 사용하고
등록시간까지도 같은 동시 등록건이 있을 수 있으니, 유니크한 정렬기준을 추가하세요.(예 : 게시글번호)
인라인뷰를 굳이 사용할 필요는 없을 것 같습니다.

SELECT ROWNUM rn
     , ROW_NUMBER() OVER(PARTITION BY DATE_FORMAT(등록시간, '%Y-%m-%d') ORDER BY 등록시간, 게시글번호) day_id
     , 게시글번호
     , 게시글제목
     , 작성자
     , 등록시간
     , DATE_FORMAT(등록시간, '%Y-%m-%d') 등록일
  FROM 게시판테이블
;

 


by 웹린이 [2021.06.24 10:12:23]

아아 그렇군요!! 이제 이해가 됬습니다 ㅜㅜ 감사합니다!! 그렇다면 등록일 기준으로 갯수를 세려면 어떻게 하는게 좋을까요..?? 예를 들면 2021-06-24에 쓰여진 게시글이 10건이면 1부터 10까지 갯수를 매기고 싶어서요..! 06-23일 게시일은 다시 1부터 게시글까지용...!


by 마농 [2021.06.24 10:20:40]

답변의 쿼리가 이미 원하는 쿼리 인 듯 한데요?


by 웹린이 [2021.06.24 10:32:10]

앗 제가 잘못봤네요 ㅠㅠ 덕분에 정말 이해가 잘되었습니다 가르침을 주셔서 감사합니다 ! 다시한번 정말 감사하며 좋은 하루되세요~!!!

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