>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL을 사용하여 그룹화된 데이터에서 발생 횟수를 최적으로 계산하는 방법은 무엇입니까?

PostgreSQL을 사용하여 그룹화된 데이터에서 발생 횟수를 최적으로 계산하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-24 06:14:16613검색

How to Optimally Count Occurrences in Grouped Data Using PostgreSQL?

PostgreSQL 그룹 데이터의 발생 횟수를 효율적으로 계산

PostgreSQL은 그룹화된 테이블의 데이터 발생 횟수를 계산하는 다양한 방법을 제공합니다. 예를 들어 CASE WHEN 문을 사용하여 특정 값의 개수를 계산할 수 있습니다.

<code class="language-sql">SELECT
    sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO,
    sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE,
    sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO,
    category
FROM reviews
    GROUP BY category</code>

그러나 가능한 값의 개수가 늘어나면 CASE WHEN 문을 사용하는 것이 점점 번거로워집니다. PostgreSQL 9.4 이상에서는 집계 FILTER 옵션이 더 명확하고 잠재적으로 더 빠른 솔루션을 제공합니다.

<code class="language-sql">SELECT category
     , count(*) FILTER (WHERE question1 = 0) AS zero
     , count(*) FILTER (WHERE question1 = 1) AS one
     , count(*) FILTER (WHERE question1 = 2) AS two
FROM   reviews
GROUP  BY 1;</code>

간결하게 하기 위해 단순화된 구문을 사용할 수 있습니다.

<code class="language-sql">SELECT category
     , count(question1 = 0 OR NULL) AS zero
     , count(question1 = 1 OR NULL) AS one
     , count(question1 = 2 OR NULL) AS two
FROM   reviews
GROUP  BY 1;</code>

대규모 옵션 목록의 경우 crosstab() 기능이 더 성능이 좋은 대안을 제공합니다.

<code class="language-sql">SELECT * FROM crosstab(
     'SELECT category, question1, count(*) AS ct
      FROM   reviews
      GROUP  BY 1, 2
      ORDER  BY 1, 2'
   , 'VALUES (0), (1), (2)'
   ) AS ct (category text, zero int, one int, two int);</code>

요약하자면 PostgreSQL은 조건부 SQL 계산을 위한 다양한 방법을 제공합니다. FILTER 옵션은 간결하고 효율적인 솔루션을 제공하는 반면, crosstab() 기능은 많은 옵션을 처리하는 데 최고의 성능을 제공합니다.

위 내용은 PostgreSQL을 사용하여 그룹화된 데이터에서 발생 횟수를 최적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.