PostgreSQL 고유 필드 값 개수

Joy Idialu 2023년1월30일
  1. PostgreSQL에서 고유한 필드 값 개수 가져오기
  2. PostgreSQL의 다른 필드를 기반으로 필드 값의 고유 개수 가져오기
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, ExpertMaster입니다. 플레이어의 전문성은 다음과 같이 플레이어의 점수에 따라 결정됩니다.

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밀리초가 걸렸습니다. 두 번째 예에서는 두 번째 쿼리가 더 빨랐지만 두 쿼리 모두 제대로 작동합니다.

이 자습서에서는 필드에서 고유한 값을 가져오는 방법과 다른 필드의 고유한 값을 기반으로 필드에서 고유한 값을 얻는 방법에 대해 논의했습니다.