티스토리 뷰
에러가 발생한 쿼리
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 절을 사용해서 다음과 같은 데이터만 가져올 수 있다.
- GROUP BY 집계함수, 그룹 함수
- GROUP BY에 명시한 컬럼
내가 쓴 쿼리의 GROUP BY 절에 SELECT 하고자 하는 컬럼을 명시하지 않았기 때문에 발생한 에러라고 명확히 알려줬기 때문에..! 에러 로그에 나온 대로 반영하는 것이 좋을 것 같아 3번 방법을 선택했다.
'1일 1삽질' 카테고리의 다른 글
[Spring] Apache POI Column was never explicitly tracked and isAllColumnsTracked() is false 에러 (0) | 2023.07.11 |
---|---|
Spring의 순환참조 (The dependencies of some of the beans in the application context form a cycle) (0) | 2022.09.03 |
Kotlin 에서 RequestDto 에 @Valid 적용하기 (0) | 2022.08.07 |
JPAN+1 예제 (0) | 2022.07.24 |
JPA OneToMany, ManyToOne 양방향 관계에서 ToString StackOverflow 해결 방법 (0) | 2022.07.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JPA
- Java
- ddl-auto
- 트랜잭션격리성
- 트랜잭션
- EC2
- CodeDeploy
- TCP
- 파일업로드설정
- 프로그래머스
- db
- 운영체제
- Oracle
- 네이버클라우드
- AWS
- level0
- OS
- N+1
- nginx
- Travis CI
- graphql
- ci/cd
- SpringSecurity
- spring
- Til
- ORA-27125
- 람다식
- SpringGraphQL
- 인덱스
- 기술면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함