> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 고유 필터를 사용하여 열을 효율적으로 집계하려면 어떻게 해야 합니까?

PostgreSQL에서 고유 필터를 사용하여 열을 효율적으로 집계하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-22 17:11:38
원래의
782명이 탐색했습니다.

How Can I Efficiently Aggregate Columns with Distinct Filters in PostgreSQL?

PostgreSQL 효율적인 집계 열 및 고유 필터

다음 코드는 플레이한 게임, 승리한 게임, 패배한 게임이라는 세 가지 개별 집계 열에 대한 데이터를 검색합니다. 이 코드는 예상대로 작동하지만 반복적이고 유지 관리가 어려울 수 있습니다. 이 쿼리를 단순화하려면 고급 PostgreSQL 기능을 사용하는 것이 좋습니다.

PostgreSQL 9.4 이상

PostgreSQL 9.4에는 새로운 집계 FILTER 절이 도입되었습니다. 이 절을 사용하면 지정된 부울 표현식을 충족하는 행만 고려하여 집계 계산에 필터를 적용할 수 있습니다.

<code class="language-sql">SELECT u.name
     , count(*) FILTER (WHERE g.winner_id > 0)    AS played
     , count(*) FILTER (WHERE g.winner_id = u.id) AS won
     , count(*) FILTER (WHERE g.winner_id != u.id) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;</code>
로그인 후 복사

PostgreSQL 9.4 이전 버전

이전 버전의 PostgreSQL에서는 표현식(표현식 또는 NULL)을 해결 방법으로 사용할 수 있습니다.

<code class="language-sql">SELECT u.name
     , count(g.winner_id > 0 OR NULL)    AS played
     , count(g.winner_id = u.id OR NULL) AS won
     , count(g.winner_id != u.id OR NULL) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;</code>
로그인 후 복사

이 해결 방법은 중첩된 하위 선택이나 CASE 표현식을 사용하는 것보다 더 짧고 빠릅니다. 추가 최적화 고려 사항은 제공된 답변에 언급된 참조를 참조하세요.

위 내용은 PostgreSQL에서 고유 필터를 사용하여 열을 효율적으로 집계하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿