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

如何在 PostgreSQL 中使用不同的篩選器簡化遊戲統計資料的聚合?

Mary-Kate Olsen
發布: 2025-01-22 17:16:10
原創
383 人瀏覽過

How Can I Simplify Aggregating Game Statistics with Distinct Filters in PostgreSQL?

使用額外(不同)過濾器聚合列

以下程式碼計算每位玩家玩過的、贏過的和輸過的遊戲次數。但是,它的長度和複雜性帶來挑戰。我們如何簡化此查詢?

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 版本

強調 PostgreSQL 9.4 引入了 FILTER 子句。對於舊版本,有一種解決方法:

<code class="language-sql">SELECT u.name,
       COUNT(CASE WHEN g.winner_id > 0 THEN 1 END) AS played,
       COUNT(CASE WHEN g.winner_id = u.id THEN 1 END) AS won,
       COUNT(CASE WHEN g.winner_id <> u.id THEN 1 END) 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的解決方案使用了CASE語句取代FILTER子句,達到相同的效果。 這兩種方法都能準確計算玩家的遊戲統計數據,但FILTER子句在可讀性和可維護性方面更具優勢。

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

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