티스토리 뷰

에러가 발생한 쿼리
select
    point.id '포인트번호',
    point.point '포인트',
    point.member2_id '멤버아이디',
    count(board.id) '작성한 게시글 수'
    from member_point2 point, board
    where point.member2_id = board.member_id
    group by board.member_id, point.point, point
    order by point.point desc limit 5;
발생한 에러
[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains 
nonaggregated column 'jpa0807.p.id' which is not functionally dependent on columns 
in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

발번역을 해보자면 SELECT 리스트의 첫 번째 항목(point)은 GROUP BY 절에 존재하지 않고, GROUP BY 절에 있는 열에 기능적으로 의존하지 않는 집계되지 않은 열을 포함하고 있다. SQL_MODE 가 ONLY_FULL_GROUP_BY 라면 해당 GROUP BY 절을 사용할 수 없다. 

해결 방법 (3가지)

1. SQL_MODE = ONLY_FULL_GROUP_BY 를 disable 시키기

SQL_MODE 가 ONLY_FULL_GROUP_BY 로 되어있기 때문에 해당 설정을 바꿔주는 것도 해결 방법일 순 있지만.. 쿼리를 수정해서 해결하고 싶어서 다른 방법도 찾아보았다.

2. Group BY 절에 사용되지 않는 컬럼을 any_value 함수 사용

select
    any_value(point.id) '포인트번호',
    any_value(point.point) '포인트',
    any_value(point.member2_id) '멤버아이디',
    count(board.id) '작성한 게시글 수'
    from member_point2 point, board
    where point.member2_id = board.member_id
    group by board.member_id, point.point, point
    order by point.point desc limit 5;

any_value 를 사용해서 원하는 데이터 값을 받을 수 있었지만 Querydsl 및 JPQL 에서는 any_value 를 지원하지 않는 것 같았다. native query 를 사용할까 했는데 Querydsl 을 사용해서 명확하게(?) 어떤 코드인지 보여주고 싶어서 any_value 도 패스했다. 

3. Group By 절에 select 할 데이터 모두 명시

select
    point.id '포인트번호',
    point.point '포인트',
    point.member2_id '멤버아이디',
    count(board.id) '작성한 게시글 수'
    from member_point2 point, board
    where point.member2_id = board.member_id
    group by board.member_id, point.id, point.point, point.member2_id
    order by point.point desc limit 5;

SQL_MODE가 ONLY_FULL_GROUP_BY 모드일 때 GROUP BY 절을 사용해서 다음과 같은 데이터만 가져올 수 있다. 

 

  1. GROUP BY 집계함수, 그룹 함수
  2. GROUP BY에 명시한 컬럼

내가 쓴 쿼리의 GROUP BY 절에 SELECT 하고자 하는 컬럼을 명시하지 않았기 때문에 발생한 에러라고 명확히 알려줬기 때문에..! 에러 로그에 나온 대로 반영하는 것이 좋을 것 같아 3번 방법을 선택했다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함