티스토리 뷰
안녕하십니까 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
'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
- Spring
- Python
- https://www.tistory.com/auth/logout/
- JavaScript
- React-router
- 페이스북 로그인
- JSON
- localStorage
- 파이썬
- data gird component
- mobx
- Router
- angular router
- CSS
- 파이썬3
- react
- python3
- data table component
- MySQL
- data component module
- data component
- Java
- data grid component
- Spring Boot
- jQuery
- JPA
- Angular
- facebook login
- Redux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |