게시글
질문&답변
SUM() 함수 문의
다른 분의 질문에 죄송합니다. 저도 비슷한 궁금증이 있었는데 덕분에 해결되었어요! 그런데 추가질문이 있어 이렇게 글을 남깁니다 ㅠㅠ 제가 느끼기로는 mysql 자체에서 GROUP BY를 실행할 경우, 한 카테고리에 여러 값이 있을 때 맨 위의 값만 출력하는 경우가 종종 있는 것 같더라고요. 예를 들어 해당 문제에서, id로 GROUP BY를 실행할 경우 단순히 revenue와 month를 출력하라고 명령했을 때 맨 위의 revenue 8000, month Jan만 출력합니다. SELECT id,revenue,month FROM DEPARTMENT GROUP BY id 이 경우 출력되는 값은 {"headers": ["id", "revenue", "month"], "values": [[1, 8000, "Jan"], [2, 9000, "Jan"], [3, 10000, "Feb"]]} 이렇게요. 그러니까 id =1 인 revenue 7000 month Feb나 revenue 6000 month Mar는 아예 출력되지 않는 것 같습니다. 이게 인터프리터 오류인지 혹은 원래 그렇게 설계된 것인지는 모르겠으나, 이러한 현상이 다른 때에도 종종 발생하는 경우를 접했습니다. 어쨌든 이러한 현상 때문에 SUM과 같은 집계함수를 해야하는 것 같는데, 혹시 맞나요? 아까의 예를 다시 설명하자면, 아까와 같은 코드로 하되 revenue가 아닌 SUM(revenue)를 출력하면 {"headers": ["id", "SUM(revenue)", "month"], "values": [[1, 21000, "Jan"], [2, 9000, "Jan"], [3, 10000, "Feb"]]} 이렇게 정상적으로 전체 revenue 값이 출력되는 것처럼요. 정리하자면 GROUP BY 함수를 사용할 때 맨 위의 데이터만 출력하는 현상이 존재하고, 집계함수를 사용하여 데이터를 전체적으로(?) 한번 더 읽어주는 것이 맞나요? 또 이걸 작성하면서 생긴 궁금증인데.. SELECT문에서 CASE WHEN month='Jan' THEN revenue ELSE NULL END 을 사용함으로써 ID로 GROUP BY된 테이블 속 Jan가 아닌 데이터들의 revenue 값이 다 NULL로 표시하는데요, 이는 원래의 department 자체를 변화시키는 건 아닌거죠? raw data를 가져오기만 하는 것이 맞나요?
- 4
- 5
- 423
질문&답변
case 문을 이해하기 위해 직접 sql editor에 코드를 작성해 보았는데 질문이 있습니다
세세하게 신경 써 주셔서 감사합니다 ㅎㅎ 추가 질문이 있는데요, 제가 쓴 코드의 경우 '*' 기호가 GROUP BY로 그룹핑하기 이전에 통용되는 기호이기 때문에 생긴 오류라는 뜻인가요? '그룹핑한 뒤의 모든 column'을 의미할 수는 없는 건가요? 저도 질문하면서 이렇게 여쭈는 것이 맞나 싶지만 ㅠㅠ 감사합니닷
- 2
- 4
- 235
질문&답변
GROUP BY에 대해 제가 이해한 개념이 맞는지 궁금합니다
넵 감사합니다 ㅎㅎ
- 2
- 4
- 365
질문&답변
GROUP BY에 대해 제가 이해한 개념이 맞는지 궁금합니다
아하 감사합니다!! 그런데 그러면 GROUP BY로 쓴 categoryid는 SELECT에서 무조건 맨 앞에 위치해야하나요? 그건 아니죠??
- 2
- 4
- 365