티스토리 뷰

DB/Mysql

MariaDB Row_Number

철철22 2019. 12. 15. 19:11
반응형

안녕하십니까 Mysql을 사용하면서 Row Number를 표시하기 위해 query를 작성해 보신 적 있나요?

 

Front에서 페이징 처리된 게시판에서 Row Number를 표시하기 위해 Server 쪽에서 작업을 해줘야 하는데 API를 호출할 때마다 Data를 불러와 프로그래밍 단에서 for문을 돌고 하면 자원이 드니 DB에서 query로 Row Number 처리를 하지 않나요? 

 

이러한 작업을 하기 위해 대부분 @변수 := 를 선언하시고 하지 않나요? 대부분 Oracle DB에서는 ROW_NUMBER() 함수를 제공하지만, Mysql & Maria DB에서는 지원을 안하는 걸로 알고 계신 분들이 있더라고여

그래서 대부분 밑의 코드로 작업을 하시는 분들이 많을거에요.

SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, p.*
FROM (
	SELECT * FROM t_posts p WHERE p.user_id = 1  ORDER BY p.register_time DESC
) as p,
(
  SELECT @ROWNUM := 0
) AS c

어떤가요? 만약에 많은 JOIN을 하는 query가 있거나 하면 이렇게 Row Number를 선언하기가 불편할 거라 생각합니다.

하지만 Maria DB에서 희소식이 있었습니다. ROW_NUMBER() 함수를 제공을 하더라고요! 하지만 버전 제약이 있어 그 이하 버전에서는 다른 방법을 찾으셔야 합니다 ㅠㅠ

 

문서를 참고해서 query를 작성을 한다면 다음과 같이 작성이 됩니다.

SELECT ROW_NUMBER() OVER(PARTITION BY p.user_id ORDER BY p.register_time DESC) AS row_num, p.*
FROM t_posts p
WHERE p.user_id = 1 ORDER BY p.register_time DESC;

 

위의 query에서 OVER~ 쪽을 보면 PARTITION BY ORDER BY 쪽 을 보시면

PARTITION BY는 GROUP BY 같은? PARTITION BY로 나눈 거에 따라 ROW_NUMBER를 작업하고

ORDER BY는 순서 번호를 매기는 규칙을 정하는 부분입니다.

 

이 외에도 RANK() 함수도 제공하고, 버전 업이 될수록 좋은 기능들이 탑재가 되는 거 같습니다!

 

 

참고 및 출처

MariaDB Document

https://mariadb.com/kb/en/library/built-in-functions/

 

MariaDB Row_Number

https://mariadb.com/kb/en/library/row_number/

반응형

'DB > Mysql' 카테고리의 다른 글

How to Excute Mysql in Linux?  (0) 2020.03.02
Mysql Backup  (0) 2020.03.01
Rand()를 이용한 랜덤 추출  (0) 2019.11.23
Mysql 글자 대치  (0) 2019.06.04
기본 용어 및개념  (0) 2018.07.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함