IT/SQL

[SQL] MYSQL에서 RANK구현하기

음료요정 2021. 6. 25. 01:22



최근 SQL-D 자격증을 공부하며 배운 함수는
회사에서 MYSQL 5.7 버전을 (8버전 이하) 사용중이라 여러 함수들이 적용안되기 때문에 무용지물이었다.
메뉴 호출 트랜젝션이 한번의 호출당 12번 씩 일어나는것을 리팩토링하다가
갑작스레 DB 버전을 업데이트 하는 위험감수보다는 쿼리를 수정하는게 낫겠다는 생각이 들어
쿼리와 js부분만 수정해보았다.
그러다가 기록하는 RANK 함수 구현하기 !

듀얼 테이블을 INNER JOIN 하여 변수를 생성해 @ROWNUM을 +1 해주는 방법과
특정컬럼으로 그룹핑하여 @RANK 변수를 한개씩 더해주는 방법이 있다

SELECT @rownum:=@rownum+1 AS NO -- @rownum : RANK를 대신해서 사용함 ,A.* FROM ( SELECT -- @RANK : P_MENU_ID로 GROUPING 하여 RANK를 대신해서 사용함 CASE @GROUPING when P_MENU_ID THEN @RANK := @RANK + 1 ELSE @RANK := 0 END AS P_MENU_NO FROM T_MENU MN INNER JOIN T_MENU_AUTH MA ON MN.MENU_ID = MA.MENU_ID INNER JOIN T_MEMBER_AUTH UA ON MA.AUTH_CD = UA.AUTH_CD AND UA.MEM_NO = #{usr_id} INNER JOIN (SELECT @GROUPING := '', @RANK := 0, @rownum := 0 ) XX WHERE 1 = 1 AND USE_YN = #{useYn} ORDER BY MN.PRINT_ORD ASC, MN.LVL ASC ) A

'IT > SQL' 카테고리의 다른 글

[MYSQL] AUTOCOMMIT 확인/변경  (0) 2021.06.22
[MYSQL] 인덱스 추가/삭제/변경  (0) 2021.06.21
[SQL] EXISTS (작성중)  (0) 2021.05.26