首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中使用不同的篩選器簡化聚合列?

如何在 PostgreSQL 中使用不同的篩選器簡化聚合列?

Linda Hamilton
發布: 2025-01-22 17:26:10
原創
882 人瀏覽過

How Can I Simplify Aggregating Columns with Distinct Filters in PostgreSQL?

在 PostgreSQL 中使用不同的過濾器簡化列聚合

以下程式碼聚合來自多個表的數據,並應用不同的過濾器對已玩、獲勝和失敗的遊戲進行分類。雖然功能強大,但其複雜性和長度保證了更有效的方法。本文探討了更簡單的方法。

利用 FILTER 子句(PostgreSQL 9.4 及更高版本)

PostgreSQL 9.4 及後續版本提供標準 SQL 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 版本的替代品

對於 PostgreSQL 9.4 之前的版本,可以使用在聚合函數中使用布林表達式的解決方法:

<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>
登入後複製

此方法雖然效率低於 FILTER 子句,但為較舊的 PostgreSQL 安裝提供了實用的解決方案。

總結

使用 FILTER 子句 (PostgreSQL 9.4 ) 或布林解決方法提供了更簡潔且在大多數情況下效能更高的解決方案。 FILTER 子句是新版本的首選方法,因為它提高了可讀性和效率。 對於舊版本,布林解決方法仍然是一個可行的替代方案。

以上是如何在 PostgreSQL 中使用不同的篩選器簡化聚合列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板