2.2 Distinct (SQL)
DISTINCT의 개요
DISTINCT는 조회된 데이터의 중복 값을 제거하는 쿼리 구문이다. 아래의 Film Table에서 대여료에 해당하는 rental_rate를 조회했을 떄는 중복값이 생긴다:
Table 0: Film Table
film_id | title | rental_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의 동작은 두개의 절차로 나누어서 생각 할 수있다.
SELECT DISTINCT rental_rate FROM film;
- 조회된 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.