[MySQL] RANK() 로 구현하는 순위 계산

개발/MySQL 2023. 6. 27. 00:26

View 테이블을 사용하여 현재 특정 데이터들에 대한 순위를 계산해야하는 경우가 있었다. MySQL의 경우에는 RANK() 함수가 5.7버전부터 추가되어 특정 칼럼에 대해 값의 순위를 계산할 때 사용할 수 있다. RANK() 함수 사용 예시 사용시 문법은 다음과 같다. RANK() OVER (PARTITION BY [구분하려는 칼럼명] ORDER BY [정렬하려는 칼럼명] DESC/ASC) 해당 함수 사용시 PARTITION BY와 DESC/ASC는 생략이 가능하다. PARTION BY PARTITION BY는 특정 동일한 제약이 걸린 데이터 끼리의 순위를 얻고 싶을 때 사용가능하다. 예를 들어 근무 시간 테이블에서 지점명 A에 소속된 직원들의 근무 시간에 대해서만 순위를 얻고 싶다면 PARTITION ..

Article Thumbnail
AWS RDS MySQL 마이그레이션 체크 사항

개발/MySQL 2022. 8. 25. 08:20

AWS Aurora RDS MySQL에서 AWS MySQL 8.0으로 마이그레이션을 진행 후, save 메소드를 사용하는 api를 호출할 때, TypeORM에서 id 값 관련된 쿼리 error가 발생하였다. TypeORMError: Cannot update entity because entity id is not set in the entity. 해당 에러가 발생하는 부분의 쿼리를 로깅해보면 정상적으로 쿼리가 생성되지만, 타겟 entity의 id가 entity에 세팅되지 않았다는 에러는 발생되므로 ORM이 아닌 DB가 이슈일 가능성이 있었다. INSERT INTO "tableName"("id", "createdAt", "updatedAt", "body") VALUES (DEFAULT, DEFAULT, D..

Article Thumbnail
TypeORM Seeding을 통한 DB 시딩(Seeding)

개발/TypeORM 2022. 8. 1. 08:20

기존에 faker.js를 사용해서 Seeding용 API 엔드포인트를 구성하였었는데 해당 Faker 모듈이 관리가 안되는 이슈도 있고, request한 유저의 권한을 valid하긴 하지만, 데이터 베이스에 직접적으로 영향을 줄 수 있는 엔드포인트가 외부로 노출되어있는 점이 불안해서 typeorm seeding을 통해 ssh로 직접 서버에 접속해서 커맨드를 날리는 방향으로 변경하였다. Faker.js를 통한 Seed API 작성 백엔드를 개발하다보면 REST API의 GET 메소드에서 DB에서 데이터를 제대로 불러오는지 확인해야하는데 이럴 때 Seed API를 통해 테스트 용도의 fake DB를 구성하는 것이 매번 데이터를 직접 입력해넣 eight20.tistory.com NestJS와 관련된 Seedin..

Article Thumbnail
[MySQL] TypeORM String 타입 사용 시 문자열 길이 제한 변경

개발/TypeORM 2022. 7. 14. 08:20

DB를 기존에 사용하던 PostgreSQL에서 MySQL로 변경하고 나서 동일한 Entity의 String 타입으로 지정된 칼럼의 문자열 길이가 공백 포함 255자 이상은 저장되지 않는 이슈가 생겼다. 기존 Entity는 Id, 생성 일시, 마지막 업데이트 일시, 제목, 설명, 썸네일, 링크로 구성되어 있는데 이슈가 발생한 부분은 description 부분이었다. TypeORM의 경우, string 타입으로 칼럼 타입을 지정하면 각 DB의 기본 문자열 저장 타입으로 변환하는데 따로 Character Type을 지정하지 않으면 PostgreSQL은 varchar, MySQL은 varchar(255)이다. // content.entity.ts @Entity() export class Content { @Pr..