Post

2.2 Distinct (SQL)

DISTINCT의 개요

DISTINCT는 조회된 데이터의 중복 값을 제거하는 쿼리 구문이다. 아래의 Film Table에서 대여료에 해당하는 rental_rate를 조회했을 떄는 중복값이 생긴다:

Table 0: Film Table

film_idtitlerental_rate
1명량4.99
2암살2.99
3어벤져스0.99
4기생충2.99
5어바웃 타임2.99
1
2
3
4
5
6
7
8
9
10
11
SELECT rental_rate FROM film;
-- 조회 결과:
-- +-----------+
-- |rental_rate|
-- +-----------+
-- |    4.99   |
-- |    2.99   |
-- |    0.99   |
-- |    2.99   |
-- |    2.99   |
-- +-----------+

조회된 데이터의 대표 값만 필요한 경우에는, 조회된 컬럼 앞에 DISTINCT 키워드를 붙여 중복을 제거할 수 있다:

1
2
3
4
5
6
7
8
9
SELECT DISTINCT rental_rate FROM film;
-- 조회 결과:
-- +-----------+
-- |rental_rate|
-- +-----------+
-- |    4.99   |
-- |    2.99   |
-- |    0.99   |
-- +-----------+

DISTINCT는 조회된 데이터 조합의 유니크한 값들을 조회하는 키워드이다. 따라서 film_id와 rental_rate를 함께 조회한다면 rental_rate의 중복은 제거되지 않는다:

1
2
3
4
5
6
7
8
9
10
11
SELECT DISTINCT rental_rate, film_id FROM film;
-- 조회 결과:
-- +-----------+-------+
-- |rental_rate|film_id|
-- +-----------+-------+
-- |    4.99   |   1   |
-- |    2.99   |   2   |
-- |    0.99   |   3   |
-- |    2.99   |   4   |
-- |    2.99   |   5   |
-- +-----------+-------+

COUNT(DISTINCT …)

DISTINCT는 COUNT와 함께 사용한다면, 중복이 제거된 개수를 조회할 수 있다. 예를 들어 Film Table에서 몇 가지 대여료가 있는 지 조회해보자. 이때 다음과 같이 쿼리문을 작성할 수 있다.

1
2
3
4
5
6
7
SELECT COUNT(DISTINCT rental_rate) FROM film;
-- 조회 결과:
-- +-----+
-- |count|
-- +-----+
-- |  3  |
-- +-----+

COUNT DISTINCT의 동작은 두개의 절차로 나누어서 생각 할 수있다.

  1. SELECT DISTINCT rental_rate FROM film;
  2. 조회된 row를 COUNT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+--------+---------+-----------+
|film_id |  title  |rental_rate|
+--------+---------+-----------+
|    1   |   명량   |   4.99    |
|    2   |   암살   |   2.99    |
|    3   |  어벤져스 |   0.99    |
|    4   |   기생충  |   2.99    |
|    5   |어바웃 타임 |   2.99    |
+--------+---------+-----------+
              |
              | (1)
              V
        +-----------+
        |rental_rate|
        +-----------+
        |   4.99    |
        |   2.99    |
        |   0.99    |
        +-----------+
              |
              | (2)
              V
           +-----+
           |count|
           +-----+
           |  3  |
           +-----+              

SELECT DISTINCT 구문은 JOIN과 결합됐을 때 더 강력한 기능을 발휘할 수 있다. 이에 대해서는 추후에 더 자세히 다룰 예정이다.

This post is licensed under CC BY 4.0 by the author.