PostgreSQL 조건 계산: CASE 문과 FILTER의 효율성 비교
효율적인 통계표에서는 데이터 발생 빈도가 중요합니다. PostgreSQL에서는 조건 계산을 위해 CASE 문을 주로 사용하는데, 이 방법은 가능한 값의 개수가 많아질수록 번거로워진다.
계산에 SUM(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>
계산하려면 COUNT(CASE WHEN)를 사용하세요.
<code class="language-sql">SELECT count(CASE WHEN question1 = 0 THEN 1 END) AS ZERO, count(CASE WHEN question1 = 1 THEN 1 END) AS ONE, count(CASE WHEN question1 = 2 THEN 1 END) AS TWO, category FROM reviews GROUP BY category</code>
CASE 문의 제한 사항:
이러한 방법은 조건부 계산을 구현할 수 있지만 다음과 같은 단점이 있습니다.
FILTER를 사용하여 PostgreSQL 9.4 버전에서 계산 최적화:
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>
이 방법은 FILTER 절을 사용하여 다양한 필터를 적용함으로써 추가 CASE 문의 오버헤드를 방지합니다.
OR NULL을 사용하여 구문을 단순화하세요.
더 간결하게 하려면 OR NULL을 사용할 수 있습니다.
<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의 FILTER 옵션과 OR NULL 구문은 조건 계산에 효율적이고 편리한 방법을 제공하며, crosstab() 함수는 복잡한 계산 시나리오에서 잘 작동합니다.
위 내용은 CASE 문, FILTER 또는 Crosstab()을 사용하여 PostgreSQL에서 조건부 계산을 효율적으로 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!