VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
mysql -u root -p sakila로 클라이언트를 여세요.
집계 함수의 동작 방식
AGGREGATE_FUNCTION을 아래 함수 중 하나로, COLUMN_NAME을 읽을 열로, TABLE_NAME을 테이블로 바꾸세요.
GROUP BY가 없으면 테이블 전체가 1개의 그룹이므로, 결과는 항상 정확히 1개의 행입니다. 대신 범주마다 1개의 행을 얻는 방법은 GROUP BY입니다.
예제
- 행 세기
- 여러 집계를 한 번에
- 금액 열 합산
COUNT(*)와 COUNT(column)은 다른 질문입니다
COUNT(*)는 행을 셉니다. COUNT(column)은 그 열에 값이 있는 행을 세므로, NULL을 건너뜁니다.
COUNT는 그것을 다른 값과 똑같은 값으로 취급합니다: COUNT가 찾는 것은 NULL이지 빈칸이 아닙니다. IS NULL 레슨이 그 차이를 다룹니다.
모든 집계 함수는 NULL을 건너뜁니다
이 규칙은COUNT에만 특별한 것이 아닙니다. 어떤 집계 함수도 NULL을 보지 않으므로, 아무것도 들어 있지 않은 열은 평균 낼 것도 만들어내지 않습니다. id의 평균을 내는 것은 의미 없는 산술이고, 이 쿼리가 그렇게 하는 이유는 original_language_id가 Sakila에서 모든 행이 NULL인 유일한 열이기 때문입니다.
AVG는 0이 아니라 NULL을 반환했는데, 나눌 것이 없었기 때문입니다. 이것이 가장 중요한 경우는 가끔만 채워지는 열에 대한 AVG입니다: 평균은 전체 행이 아니라 값이 있는 행에 대한 것이고, 그 2개의 숫자는 같지 않습니다. 아무것도 없을 때 SUM도 NULL이지만, 아무것도 없을 때 COUNT는 0입니다.
요약
- 여러 행을 1개의 값으로 줄이려면 집계 함수를 사용하세요.
GROUP BY가 없으면 정확히 1개의 행이 돌아온다고 예상하세요.COUNT(*)는 행이 몇 개인지로,COUNT(column)은 값이 있는 행이 몇 개인지로 읽으세요.- 모든 집계 함수가 NULL을 건너뛰므로, 평균은 값이 있는 행에 대한 것이라고 예상하세요.
- 해당하는 행이 없을 때
SUM과AVG는 0이 아니라 NULL을 준다고 예상하세요.
함께 보기
- GROUP BY — 전체 1개 대신 범주마다 1개의 결과 행
- COUNT DISTINCT — 행이 아니라 서로 다른 값 세기
- IS NULL — 이 함수들이 건너뛰는 값
- MySQL GROUP BY 성능 — 대규모에서 집계에 드는 비용