일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- primary_key
- srtpos()
- JavaScript
- 동작안함
- 지직거림
- 노션
- explode()
- 중간에추가
- 오류
- strpos()
- implode()
- 문자열 포함여부
- 일부 문자열 포함여부
- MySQL
- myshortcut
- getimagesize()
- 1064
- includes()
- jQuery
- 특수문자 포함여부
- formula
- 정규식
- 이걸 그렇게 쓸 줄은 몰랐지
- 서버부하
- Excel
- error
- 배열
- php
- ES6
- SQL
- Today
- Total
코딩짜는 일상
[MySQL] Error Code: 1111, Error Code: 1064 - SUM IF 를 이용한 조건을 만족하는 값들의 합 구하기 본문
[MySQL] Error Code: 1111, Error Code: 1064 - SUM IF 를 이용한 조건을 만족하는 값들의 합 구하기
Remily 2023. 6. 9. 12:45서론
업소별 매출자료를 조회하다가 Error Code: 1111
와 Error Code: 1064
에러를 봤습니다.
원하는 건
배달완료 건수, 배달취소 건수, 배달완료 할인금액(포인트 + 쿠폰), 배달완료 매출금액
이렇게 4개였는데 WHERE
절에 배달완료인 상태, 배달취소인 상태를 각각 조건 바꿔서 검색하는게 귀찮았습니다.
그래서 WHERE '배달상태' IN ('완료', '취소')
를 조건으로 두고 SUM
, IF
를 이용해 조건 합을 구하려 했지만...
배달완료 할인금액(포인트 + 쿠폰)
에서 오류가 발생하였습니다.
Error Code: 1111
가장 먼저
조건이 맞으면 SUM
을 이용해 포인트와 쿠폰값을 더하도록 해봤습니다.
SELECT SUM( IF(`배달상태`='완료', sum(`포인트` + `쿠폰`), 0) ) AS 할인금액
WHERE `배달상태` IN ('완료', '취소')
...(이하 조건 생략)...
결과
Error Code: 1111. Invalid use of group function
응답을 받았는데, 이는 GROUP
함수를 잘못썼을 때 나타난다고 합니다.
GROUP BY
는 쓴 적 없으니 아니고...
그 외 관련 함수로는 COUNT
, SUM
이 있는데
이 경우엔 SUM
이 문제였습니다.
엑셀에서 A와 B의 합을 구하기위해 SUM
을 쓰는 것과 다르게
MySQL에선 조회하여 나오는 모든 rows를 그룹으로 묶었을 때 하나의 칼럼의 값들을 전부 더한 값을 구해줍니다.
즉, sum(포인트 + 쿠폰)
을 할 때 같이 그룹으로 묶이는 rows가 없어서
또는 그룹이 불분명해서 오류가 난 것이라 볼 수 있겠죠.
Error Code: 1064
그래서 SUM
을 빼고 (포인트 + 쿠폰)
만 해봤지만
SELECT SUM( IF(`배달상태`='완료', (`포인트` + `쿠폰`), 0) ) AS 할인금액
WHERE `배달상태` IN ('완료', '취소')
...(이하 조건 생략)...
Error Code: 1064. You have an error in your SQL syntax
응답을 받았습니다.
여기서 드는 의심은 IF
를 수행할 때
내부에서 간단한 사칙연산까지는 수행할 수 없는게 아닐까 였습니다.
최종 해결
최종적으로 포인트와 쿠폰을 각각 SUM
, IF
하고 그 합을 사칙연산으로 구했습니다.
SELECT SUM( IF(`배달상태`='완료', `포인트`, 0) ) + SUM( IF(`상태`='완료', `쿠폰`, 0) ) AS 할인금액
WHERE `배달상태` IN ('완료', '취소')
...(이하 조건 생략)...
결과는 성공~!
깨달은 점
- SUM은 같은 row의 다른 칼럼들 끼리 합을 구하는데 쓰지 않는다.
- IF는 조건이 맞을 때 또는 틀릴 때 반환하는 값에서 간단한 사칙연산을 추가로 수행하지 못한다.
'IT > MySQL' 카테고리의 다른 글
[MySQL] INSERT 방법 2가지 장단점 (0) | 2022.12.07 |
---|---|
[MySQL] safe mode에서 DELETE - error code: 1175 (0) | 2022.12.02 |
[MySQL] 1065 : Query was empty (0) | 2022.03.15 |
[MySQL] 몰라서 당황했지만 알고보면 간단한 CMD명령문 오류 해결법 (0) | 2021.09.29 |