TypeORM GroupBy를 사용하여 정렬 Count하기

모든 유저를 지역별로, 연령별로 정렬하여 유저 수를 통계를 내야되는 이슈가 있었다.

 

연령별로 묶어서 Count를하여 aged_user: [{age:'21', age_count:'10'}, {age: '22', age_count:'12'}]의 형식으로 프론트에 리턴해주는 것을 목표로 typeorm QueryBuilder를 사용하여 쿼리를 구성하였다.

 

const userByAge = await this.repository
      .createQueryBuilder('user') // 유저 테이블을 지칭하는 이름을 'user'로 한다.
      .select('user.age') // 정렬할 유저 테이블의 칼럼만 select한다.
      .orderBy('user.age', 'DESC') // select한 칼럼을 내림차순으로 정렬한다.
      .addSelect('COUNT(*) AS ageCount') // ageCount라는 이름으로 COUNT를 한다.
      .groupBy('user.age') // 유저 나이별로 묶는다.
      .getRawMany(); // Raw data 형식으로 리턴한다.

 

유저 테이블에서 나이 칼럼을 Select해와서 내림차순으로 정렬한 후, COUNT(*)를 통해 개수를 카운트 하고 .groupBy('user.age')를 통해 유저 나이별로 묶어서 .getRawMany()로 Raw data 형식으로 리턴하였다.

 

해당 쿼리가 리턴한 값은 아래처럼 예상대로 출력되었다.