다음 코드는 플레이한 게임, 승리한 게임, 패배한 게임이라는 세 가지 개별 집계 열에 대한 데이터를 검색합니다. 이 코드는 예상대로 작동하지만 반복적이고 유지 관리가 어려울 수 있습니다. 이 쿼리를 단순화하려면 고급 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!