이 글은 MySQL에서 행/데이터 개수를 셀 때 사용하는 COUNT 함수 설명과 예시를 담은 글입니다.
MySQL COUNT 함수
- SELECT: 테이블 내 모든/특정 데이터 개수 세기 가능.
- WHERE: COUNT() 값을 조건으로 데이터 필터링 가능.
이로써 데이터 탐색과 오입력 여부 확인, 필터링 등이 가능합니다.
MySQL COUNT 함수 사용 방법(문법)
COUNT(*), 전체(모든) 행 개수 세기
- 별표(*)
'전체/모든'이라는 의미가 있습니다. 그래서 NULL 값을 포함하여 개수를 셉니다.
특정 컬럼의 행 개수 세기
위와 달리, NULL 값은 제외하고 개수를 셉니다.
*NULL 값 관련 글 MySQL NULL 값 치환(대체), COALESCE 함수 예시
중복 없이 특정 컬럼의 행 개수 세기
- DISTINCT
중복 없이, NULL 값을 제외해서 개수를 셉니다.
*DISTINCT 관련 글 MySQL 중복 제거 DISTINCT 쉬운 사용법 예시
특정 컬럼에서 특정 값 개수 세기
WHERE 조건절로 특정 컬럼에서 특정 값의 개수를 셉니다.
찾으려는 값이 문자라면, '데이터'처럼 따옴표로 감쌉니다.
반면 숫자라면, 따옴표 없이 숫자만 입력합니다.
*특정 문자 찾기 관련 글 MySQL LIKE 여러 개 검색(LIKE IN), REGEXP 사용 방법
컬럼 조합 개수 세기
COUNT 함수는 아래처럼 하나 이상의 컬럼을 입력할 수 있습니다.
이는 N개의 컬럼을 바탕으로, 데이터 조합의 개수를 셀 때 사용합니다.
SELECT COUNT(expr, expr, ...)
FROM 테이블명;
사용자 정보가 담긴 user_info 테이블을 예시로 봅시다.
- user_id: 개별 사용자 아이디, 고윳값(중복 X)
- action_code: 사용자 행동 별 코드
user_info | |
user_id | action_code |
E12345 | 111 |
E12345 | 222 |
B09876 | 333 |
D24680 | 999 |
O54321 | 333 |
위 테이블처럼, 만약 사용자들이 했던 특정 행동 데이터를 갖고 있다고 생각해 봅시다.
모두 다른 사용자라도, 같은 행동을 했을 수 있습니다. 혹은 한 사용자가 여러 행동들을 했을 수 있습니다.
이처럼 모든 경우의 수를 세고 싶다면, 사용자와 행동의 조합을 바탕으로 COUNT 하면 됩니다.
SELECT COUNT(DISTINCT user_id) AS user_id_cnt
, COUNT(DISTINCT action_code) AS action_code_cnt
, COUNT(user_id, action_code) AS comb_cnt
FROM user_info;
user_id_cnt | action_code_cnt | comb_cnt |
4 | 4 | 5 |
어떻게 이런 결과가 나오는지, 과정을 풀어봅시다.
SELECT user_id
, action_code
, COUNT(user_id, action_code) AS comb_cnt
FROM user_info
GROUP BY user_id, action_code;
user_info | ||
user_id | action_code | comb_cnt |
E12345 | 111 | 1 |
E12345 | 222 | 1 |
B09876 | 333 | 1 |
D24680 | 999 | 1 |
O54321 | 333 | 1 |
- user_id_cnt: user_id를 중복 없이 COUNT
>> 4 (=E12345, B09876, D24680, O54321)
- action_code_cnt: action_code를 중복없이 COUNT
>> 4 (=111, 222, 333, 999)
- comb_cnt: user_id와 action_code를 조합한 경우의 수
>> 5 (1+1+1+1+1)
MySQL COUNT 함수 예시
총 8개의 행(ROW)으로 이루어진 테이블(score)입니다.
전체(모든) 행 개수 세기 예시
SELECT COUNT(*) FROM score; |
COUNT(*) |
8 |
특정 컬럼의 행 개수 세기 예시
총 8개의 행이지만, music 컬럼의 NULL 값 2개를 제외했습니다.
SELECT COUNT(music) FROM score; |
COUNT(music) |
6 |
중복 없이 특정 컬럼의 행 개수 세기 예시
music 컬럼의 중복 값인 87을 한 번만 count 하고 NULL값은 제외했습니다.
SELECT COUNT(DISTINCT(music)) FROM score; |
COUNT(music) |
5 |
특정 컬럼에서 특정 값 세기 예시
music 컬럼에서 숫자 데이터 87을 count 했습니다.
SELECT COUNT(music) FROM score WHERE music=87; |
COUNT(music) |
2 |
'SQL > MySQL' 카테고리의 다른 글
MySQL INNER JOIN(내부 조인) 다양한 문법과 예시 (0) | 2023.09.12 |
---|---|
MySQL 집계 함수, GROUP BY와 HAVING 사용 방법 (0) | 2023.09.11 |
MySQL 조건문 CASE WHEN, 조건 여러 개(AND, OR) (0) | 2023.09.06 |
MySQL 금액 타입(INT), 숫자 천단위 콤마 찍기 FORMAT 함수 예시 (0) | 2023.09.04 |
MySQL NULL 값 치환(대체), COALESCE 함수 예시 (0) | 2023.09.01 |