본문 바로가기

IT/DB

mysql distinct, group by 차이는?

300x250

 

 

 

 

DISTINCT와 GROUP BY는 모두 SQL에서 중복 데이터를 처리하거나 그룹화된 데이터를 가져올 때 사용되지만,

 

그 목적과 동작 방식에는 중요한 차이가 있습니다.

 

1. DISTINCT

목적:

DISTINCT는 중복된 결과를 제거하고 고유한 값을 반환하는 데 사용됩니다.

동작 방식:

  • 행 전체 또는 특정 열에 대해 중복된 값을 제거하고, 고유한 결과 집합을 반환합니다.
  • DISTINCT는 반환된 모든 열의 조합을 고려하여 중복 여부를 판단합니다.

사용 예시:

예시 1: 특정 열에서 고유한 값

SELECT DISTINCT column_name 
FROM table_name;
 
  • column_name에 있는 고유한 값들만 반환합니다.

예시 2: 여러 열의 조합에서 고유한 값

SELECT DISTINCT column1, column2 
FROM table_name;
 
  • column1과 column2의 조합이 고유한 행들만 반환합니다.

결과:

column1 column2
A 1
A 2
B 1

 

2. GROUP BY

 

목적:

GROUP BY는 데이터를 특정 열을 기준으로 그룹화하고, 각 그룹에 대해 집계 함수(예: SUM, COUNT, AVG 등)를 사용하여 통계 값을 계산할 때 사용됩니다.

동작 방식:

  • 데이터를 하나 이상의 열을 기준으로 그룹화한 후, 각 그룹에 대해 집계 작업을 수행합니다.
  • GROUP BY는 집계 함수와 함께 자주 사용됩니다.

사용 예시:

예시 1: 기본 그룹화

SELECT column_name, COUNT(*) 
FROM table_name 
GROUP BY column_name;
 
  • column_name을 기준으로 데이터를 그룹화하고, 각 그룹의 행 수를 계산합니다.

예시 2: 다중 열 그룹화

SELECT column1, column2, SUM(column3) 
FROM table_name 
GROUP BY column1, column2;
 
  • column1과 column2의 조합으로 그룹화하고, 각 그룹의 column3 합계를 계산합니다.

결과:

column1 column2 SUM(column3)
A 1 10
A 2 20
B 1 30

 

3. 차이점 요약

특징 DISTINCT GROUP BY
목적 중복된 행 제거 데이터를 특정 열로 그룹화
사용 맥락 중복된 행을 제거하고 고유한 결과 반환 그룹화된 데이터에 대해 집계 함수 적용
집계 함수 지원하지 않음 집계 함수(SUM, COUNT, AVG 등)와 함께 사용
출력 중복을 제거한 고유 행 반환 그룹화된 데이터에 대한 집계 결과 반환
사용 예시 SELECT DISTINCT column_name SELECT column_name, COUNT(*) FROM table GROUP BY column_name
중복 기준 모든 열 또는 특정 열의 고유 조합 지정된 열을 기준으로 그룹화 및 집계

 

4. 언제 사용해야 하나?

  • DISTINCT:
    • 고유한 값들을 추출하고자 할 때.
    • 중복된 데이터를 제거한 고유 행을 반환하고자 할 때.
  • GROUP BY:
    • 특정 기준으로 데이터를 그룹화하고, 그룹별로 집계 함수(SUM, COUNT, AVG, 등)를 사용하여 통계를 내고자 할 때.
    • 데이터의 요약 정보(예: 총합, 평균, 개수 등)를 그룹별로 계산하고자 할 때.

예시 비교

예시 테이블:

id category value
1 A 10
2 B 20
3 A 10
4 B 30
5 A 40

 

  • DISTINCT 사용:결과:

    category
    A
    B
  • SELECT DISTINCT category FROM example_table;

  • GROUP BY 사용:결과:

    category SUM(value)
    A 60
    B 50
  •  
    SELECT category, SUM(value) FROM example_table GROUP BY category;

DISTINCT는 고유한 category를 가져오고, GROUP BY는 category 별로 value의 합계를 계산합니다.

 

 

 

 

 

300x250