PostgreSQL 고유 필드 값 개수
필드에서 고유한 값을 가져오는 것은 알아야 할 중요한 쿼리입니다. 이 자습서에서는 필드에서 고유한 값 수를 가져오는 방법에 대해 설명합니다.
PostgreSQL에서 고유한 필드 값 개수 가져오기
퀴즈 게임에서 각 참가자의 점수를 추적하는 quiz_score
테이블을 고려하십시오.
id | player_id | score |
---|---|---|
1 | 1 | 10 |
2 | 2 | 10 |
3 | 3 | 18 |
4 | 4 | 69 |
5 | 5 | 24 |
6 | 6 | 67 |
7 | 7 | 94 |
8 | 8 | 68 |
9 | 9 | 33 |
10 | 10 | 5 |
다음은 테이블에 대한 CREATE
문입니다.
CREATE TABLE quiz_score
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY,
player_id integer NOT NULL,
score integer NOT NULL,
CONSTRAINT quiz_score_pkey PRIMARY KEY (id)
);
다음은 테이블을 데이터로 채우는 INSERT
문입니다.
INSERT INTO quiz_score (player_id, score)
SELECT i, floor(random()*(100-0+1))
FROM generate_series(1,10000000) i;
우리는 테이블에 천만 개의 무작위 점수를 삽입했습니다. 다음 쿼리를 실행하여 테이블에 고유한 점수가 몇 개 있는지 알아보겠습니다.
SELECT COUNT(DISTINCT score) FROM quiz_score;
이 쿼리는 101개의 고유한 값을 포함하여 3초 391밀리초가 소요되었습니다.
이 다른 쿼리를 실행하여 테이블에서 고유한 점수의 수를 찾을 수도 있습니다.
SELECT COUNT(*) FROM (SELECT DISTINCT score FROM quiz_score) AS DistinctScores;
이 새로운 쿼리는 101개의 고유 값을 포함하여 1초 572밀리초가 걸렸습니다.
보시다시피 두 번째 쿼리가 더 빨랐습니다. 두 쿼리 모두 제대로 작동하지만 이 경우 두 번째 쿼리가 더 빠릅니다.
PostgreSQL의 다른 필드를 기반으로 필드 값의 고유 개수 가져오기
이제 Expertise
이라는 새로운 칼럼을 소개하겠습니다. 이 필드는 플레이어의 점수를 기반으로 채워집니다.
Expertise
값은 Beginner
, Intermediary
, Expert
및 Master
입니다. 플레이어의 전문성은 다음과 같이 플레이어의 점수에 따라 결정됩니다.
Expertise | score |
---|---|
Beginner | 0 - 50 |
Intermediary | 51 - 80 |
Expert | 81 - 90 |
Master | 91 - 100 |
새로 업데이트된 quiz_score
테이블은 다음과 같습니다.
id | player_id | score | player_rank |
---|---|---|---|
1 | 1 | 10 | Beginner |
2 | 2 | 10 | Beginner |
3 | 3 | 18 | Beginner |
4 | 4 | 69 | Intermediary |
5 | 5 | 24 | Beginner |
6 | 6 | 67 | Intermediary |
7 | 7 | 94 | Master |
8 | 8 | 68 | Intermediary |
9 | 9 | 33 | Beginner |
34 | 34 | 89 | Expert |
다음은 새 열을 테이블에 추가하는 ALTER TABLE
문입니다.
ALTER TABLE quiz_score ADD COLUMN expertise text;
다음은 전문 분야를 채우는 UPDATE
문입니다.
UPDATE quiz_score
SET expertise =
(CASE
WHEN score >= 0
AND score <= 50 THEN 'Beginner'
WHEN score > 50
AND score <= 80 THEN 'Intermediary'
WHEN score > 80
AND score <= 90 THEN 'Expert'
WHEN score > 90 THEN 'Master'
END);
이전 예에서 우리는 표에서 고유한 점수를 살펴보았습니다. 이 예에서 다음 쿼리를 실행하여 테이블의 각 전문 지식에 대해 얼마나 많은 개별 점수가 있는지 알아보겠습니다.
SELECT expertise, COUNT(DISTINCT score)
FROM quiz_score
GROUP BY expertise
결과는 다음과 같습니다.
expertise | count
--------------+-------
Beginner | 51
Intermediary | 10
Expert | 30
Master | 10
이 쿼리에서 Beginner
전문 지식은 51개의 고유 점수, Intermediary
는 10개의 고유 점수, Expert
는 30개의 고유 점수, Master
는 10개의 고유 점수를 가지고 있음을 알 수 있습니다. 쿼리는 14초 515밀리초가 걸렸습니다.
이 다른 쿼리를 실행하여 테이블에서 고유한 점수의 수를 찾을 수도 있습니다.
SELECT
DISTINCT ON (expertise) expertise,
COUNT(DISTINCT score)
FROM
quiz_score
GROUP BY expertise
이 새로운 쿼리는 12초 165밀리초가 걸렸습니다. 두 번째 예에서는 두 번째 쿼리가 더 빨랐지만 두 쿼리 모두 제대로 작동합니다.
이 자습서에서는 필드에서 고유한 값을 가져오는 방법과 다른 필드의 고유한 값을 기반으로 필드에서 고유한 값을 얻는 방법에 대해 논의했습니다.