12.19.1 GROUP BY (통합) 함수
표 12.24 집계 ( GROUP BY
) 함수
이름 | 설명 |
---|---|
AVG () | 인수의 평균을 반환합니다 |
BIT_AND () | 비트 단위 And을 반환합니다 |
BIT_OR () | 비트 단위 OR를 반환합니다 |
BIT_XOR () | 비트 XOR을 반환합니다 |
COUNT (DISTINCT) | 다른 값의 개수를 반환합니다 |
COUNT () | 반환 된 행의 수를 반환합니다 |
GROUP_CONCAT () | 연결된 문자열을 반환합니다 |
MAX () | 최대 값을 반환합니다 |
MIN () | 최소값을 반환합니다 |
STD () | 모집단 표준 편차를 반환합니다 |
STDDEV_POP () | 모집단 표준 편차를 반환합니다 |
STDDEV_SAMP () | 표본 표준 편차를 반환합니다 |
STDDEV () | 모집단 표준 편차를 반환합니다 |
SUM () | 집계를 반환합니다 |
VAR_POP () | 어머니 표준 분산을 반환합니다 |
VAR_SAMP () | 표본 분산을 반환합니다 |
VARIANCE () | 어머니 표준 분산을 반환합니다 |
이 섹션에서는 값 세트에서 동작하는 그룹 (집합) 함수에 대해 설명합니다. 특히 지정되어 있지 않으면, 그룹 함수는 NULL
값이 무시됩니다.
GROUP BY
절을 포함하지 않는 문에서 그룹 함수를 사용하려면 모든 행을 그룹화하는 것과됩니다. 자세한 내용은 섹션 12.19.3 "MySQL의 GROUP BY 처리" 를 참조하십시오.
숫자 인수의 경우, 분산 및 표준 편차 함수가 DOUBLE
값을 반환합니다. SUM()
및 AVG()
함수는 정확한 값 인수 (정수 또는 DECIMAL
)의 경우는 DECIMAL
값을 반환 근사치 인수 ( FLOAT
또는 DOUBLE
)의 경우는 DOUBLE
값을 반환합니다.
SUM()
및 AVG()
집계 함수는 시간 값을 취급하지 않습니다. (이러한 값을 숫자로 변환하기 때문에 첫 번째 숫자가 아닌 문자 뒤의 모든 정보가 손실됩니다.)이 문제를 해결하려면 숫자 단위로 변환하여 집계 작업을 수행하고 시간 값으로 되돌립니다. 예 :
SELECT SEC_TO_TIME (SUM (TIME_TO_SEC (time_col
))) FROMtbl_name
; SELECT FROM_DAYS (SUM (TO_DAYS (date_col
))) FROMtbl_name
;
수치 인수를 SUM()
과 AVG()
등의 함수는 필요에 따라 인수를 숫자로 변환합니다. SET
및 ENUM
값의 경우 캐스트 연산에 기반이되는 수치가 사용됩니다.
AVG ([DISTINCT]
expr
)
의 평균 값을 반환합니다.expr
DISTINCT
옵션을 사용하면 개별expr
값의 평균을 반환 할 수 있습니다.일치하는 행이없는 경우,
AVG()
는NULL
을 반환합니다.mysql>
SELECT student_name, AVG(test_score)
->FROM student
->GROUP BY student_name;
BIT_AND (
expr
)expr
의 모든 비트의 비트 단위AND
를 반환합니다. 계산은 64 비트 (BIGINT
)의 정밀도로 실행됩니다.일치하는 행이없는 경우,이 함수는
18446744073709551615
을 돌려줍니다. (이것은 모든 비트가 1로 설정된 부호가없는BIGINT
값의 값입니다.)BIT_OR (
expr
)expr
의 모든 비트의 비트 단위OR
를 반환합니다. 계산은 64 비트 (BIGINT
)의 정밀도로 실행됩니다.일치하는 행이없는 경우,이 함수는
0
을 반환합니다.BIT_XOR (
expr
)expr
의 모든 비트의 비트 단위XOR
을 반환합니다. 계산은 64 비트 (BIGINT
)의 정밀도로 실행됩니다.일치하는 행이없는 경우,이 함수는
0
을 반환합니다.COUNT (
expr
)SELECT
문에서 검색된 행에 포함 된expr
의 비NULL
값의 수를 돌려줍니다. 결과는BIGINT
값입니다.일치하는 행이없는 경우,
COUNT()
는0
을 반환합니다.mysql>
SELECT student.student_name,COUNT(*)
->FROM student,course
->WHERE student.student_id=course.student_id
->GROUP BY student_name;
COUNT(*)
는NULL
값이 포함되는지 여부에 관계없이 취득 된 행의 수를 반환한다는 점에서 약간 다릅니다.COUNT(*)
는SELECT
가 하나의 테이블에서 가져오고, 다른 컬럼은 검색되지 않고WHERE
절이없는 경우에 매우 신속하게 반환하도록 최적화되어 있습니다. 예 :mysql>
SELECT COUNT(*) FROM student;
이 최적화는
MyISAM
테이블에만 적용됩니다. 그 이유는 정확한 행이 스토리지 엔진에 포함되는 것으로, 매우 빠르게 액세스 할 수 있습니다.InnoDB
등의 트랜잭션 스토리지 엔진에서 정확한 행을 저장하면 여러 트랜잭션이 각각 숫자에 영향을 미칠 수 있기 때문에 문제가 발생할 가능성이 높아집니다.COUNT (DISTINCT
expr
[expr
...])다양한 비
NULL
expr
값을 갖는 행의 수를 돌려줍니다.일치하는 행이없는 경우,
COUNT(DISTINCT)
는0
을 반환합니다.mysql>
SELECT COUNT(DISTINCT results) FROM student;
MySQL에서는,식이 목록을 지정하여
NULL
이 포함되지 않는 개별 식의 조합 수를 얻을 수 있습니다. 표준 SQL에서는COUNT(DISTINCT ...)
내부에서 모든 수식을 연결해야합니다.GROUP_CONCAT (
expr
)이 함수는 그룹에서 연결된 비
NULL
값을 포함한 문자열의 결과를 반환합니다. 비NULL
값이 없으면NULL
을 반환합니다. 완전한 구문은 다음과 같습니다.GROUP_CONCAT ([DISTINCT]
expr
[,expr
...] [ORDER BY {unsigned_integer
|col_name
|expr
} [ASC | DESC] [,col_name
...] [SEPARATORstr_val
)mysql>
SELECT student_name,
->GROUP_CONCAT(test_score)
->FROM student
->GROUP BY student_name;
또는 :
mysql>
SELECT student_name,
->GROUP_CONCAT(DISTINCT test_score
->ORDER BY test_score DESC SEPARATOR ' ')
->FROM student
->GROUP BY student_name;
MySQL에서는,식이 조합을 연결 한 값을 얻을 수 있습니다. 중복 값을 제거하려면
DISTINCT
절을 사용합니다. 결과 값을 정렬하려면ORDER BY
절을 사용합니다. 역순으로 정렬하려면ORDER BY
구문으로 정렬 할 컬럼의 이름에DESC
(내림차순) 키워드를 추가합니다. 기본값은 오름차순입니다. 이것은ASC
키워드를 사용하여 명시 적으로 지정할 수 있습니다. 그룹의 값 사이의 기본 구분 기호는 쉼표 ( ",
")입니다. 구분자를 명시 적으로 지정하려면SEPARATOR
계속하여 그룹 값 사이에 삽입되는 문자열 리터럴 값을 지정합니다. 구분자를 완전히 제거하려면SEPARATOR ''
를 지정합니다.결과는
group_concat_max_len
시스템 변수에 지정된 최대 길이로 절단됩니다. 그 변수의 기본값은 1024입니다. 더 높은 값으로 설정할 수 있지만 반환 유효한 최대 길이는max_allowed_packet
값에 의해 제한됩니다. 실행시group_concat_max_len
의 값을 변경하는 구문은 다음과 같습니다. 여기에서val
는 부호없는 정수입니다.SET [GLOBAL | SESSION] group_concat_max_len =
val
;반환 값은 인수가 아닌 바이너리와의 두 문자열인지에 따라 비 이진 문자열 또는 이진 문자열입니다. 결과 형식은
group_concat_max_len
가 512 이하인 경우 (이 경우, 결과의 형태는VARCHAR
또는VARBINARY
입니다)을 제외하고,TEXT
또는BLOB
입니다.CONCAT()
와CONCAT_WS()
: 섹션 12.5 "문자열 함수" 를 참조하십시오.MAX ([DISTINCT]
expr
)expr
의 최대 값을 반환합니다.MAX()
는 문자열 인수를 지정할 수 있습니다. 이런 경우는 최대 문자열 값이 반환됩니다. 섹션 8.3.1 "MySQL의 인덱스 사용 방법" 을 참조하십시오.DISTINCT
키워드를 사용하면 개별expr
값의 최대를 찾을 수 있습니다. 그러나DISTINCT
를 생략 한 것과 같은 결과가 생성됩니다.일치하는 행이없는 경우,
MAX()
는NULL
을 반환합니다.mysql>
SELECT student_name, MIN(test_score), MAX(test_score)
->FROM student
->GROUP BY student_name;
현재 MySQL의
MAX()
는ENUM
및SET
컬럼이 세트 내의 문자열의 상대 위치가 아니라 문자열 값에 비교됩니다. 이것은ORDER BY
에 의한 비교 방법과는 다릅니다. 이것은 향후의 MySQL 버전에 반영 될 예정입니다.MIN ([DISTINCT]
expr
)expr
의 최소치를 돌려줍니다.MIN()
는 문자열 인수를 지정할 수 있습니다. 이런 경우는 최소 문자열 값이 반환됩니다. 섹션 8.3.1 "MySQL의 인덱스 사용 방법" 을 참조하십시오.DISTINCT
키워드를 사용하면 개별expr
값의 최소를 찾을 수 있습니다. 그러나DISTINCT
를 생략 한 것과 같은 결과가 생성됩니다.일치하는 행이없는 경우,
MIN()
는NULL
을 반환합니다.mysql>
SELECT student_name, MIN(test_score), MAX(test_score)
->FROM student
->GROUP BY student_name;
현재 MySQL의
MIN()
는ENUM
및SET
컬럼이 세트 내의 문자열의 상대 위치가 아니라 문자열 값에 비교됩니다. 이것은ORDER BY
에 의한 비교 방법과는 다릅니다. 이것은 향후의 MySQL 버전에 반영 될 예정입니다.STD (
expr
)expr
의 모집단 표준 편차를 반환합니다. 이것은 표준 SQL의 확장입니다. 대신, 표준 SQL 함수STDDEV_POP()
를 사용할 수 있습니다.일치하는 행이없는 경우,이 함수는
NULL
을 반환합니다.STDDEV (
expr
)expr
의 모집단 표준 편차를 반환합니다. 이 함수는 Oracle과의 호환성을 보장하기 위해 제공되고 있습니다. 대신, 표준 SQL 함수STDDEV_POP()
를 사용할 수 있습니다.일치하는 행이없는 경우,이 함수는
NULL
을 반환합니다.STDDEV_POP (
expr
)expr
의 어머니 표준 편차 (VAR_POP()
의 제곱근)를 반환합니다.STD()
또는STDDEV()
를 사용할 수 있습니다. 이들은 동일하지만 표준 SQL되지 않습니다.일치하는 행이 아니었다면
STDDEV_POP()
는NULL
을 반환합니다.STDDEV_SAMP (
expr
)expr
의 표본 표준 편차 (VAR_SAMP()
의 제곱근)를 반환합니다.일치하는 행이 아니었다면
STDDEV_SAMP()
는NULL
을 반환합니다.SUM ([DISTINCT]
expr
)expr
의 집계를 반환합니다. 반환 값 세트에 행이 포함되지 않은 경우SUM()
는NULL
을 반환합니다.DISTINCT
키워드를 사용하면 개별expr
값만을 집계 할 수 있습니다.일치하는 행이없는 경우,
SUM()
는NULL
을 반환합니다.VAR_POP (
expr
)expr
의 파퓰레이션 표준을 돌려줍니다. 행은 표본이 아닌 전체 모집단으로 간주되기 때문에 줄 수가 분모로 간주됩니다. 또한VARIANCE()
을 사용할 수도 있습니다. 이것은 동일하지만 표준 SQL되지 않습니다.일치하는 행이 아니었다면
VAR_POP()
는NULL
을 반환합니다.VAR_SAMP (
expr
)expr
의 표본 분산을 반환합니다. 즉, 분모는 행 수에서 1을 뺀 것입니다.일치하는 행이 아니었다면
VAR_SAMP()
는NULL
을 반환합니다.VARIANCE (
expr
)expr
의 파퓰레이션 표준을 돌려줍니다. 이것은 표준 SQL의 확장입니다. 대신, 표준 SQL 함수VAR_POP()
를 사용할 수 있습니다.일치하는 행이없는 경우,
VARIANCE()
는NULL
을 반환합니다.