首頁 >資料庫 >mysql教程 >如何在 MySQL 中透過條件過濾高效檢索多個求和聚合?

如何在 MySQL 中透過條件過濾高效檢索多個求和聚合?

Susan Sarandon
Susan Sarandon原創
2025-01-21 12:45:10782瀏覽

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

MySQL:透過條件過濾高效檢索多個求和聚合

使用資料庫通常需要根據不同的條件檢索多個資料集。 當處理單一查詢中的不同欄位值時,這可能會特別複雜。

挑戰:

考慮一個包含 transactionsidaccount_idbudget_idpoints 欄位的 type 表。 目標是在單一查詢中檢索每個 pointsbudget_id 總和,其中 type 等於“分配”,並分別檢索 points 的總和,其中 type 等於“問題”。

解:利用 MySQL 的 IF() 函式

MySQL 的 IF() 函數提供了一個簡潔的解決方案。 我們可以在 SUM() 聚合中使用它,並與 GROUP BY 結合使用,以獲得所需的結果:

<code class="language-sql">SELECT 
    budget_id, 
    SUM(IF(type = 'allocation', points, 0)) AS allocated,
    SUM(IF(type = 'issue', points, 0)) AS issued
FROM 
    transactions
GROUP BY 
    budget_id;</code>

查詢細分:

  • IF(type = 'allocation', points, 0):此條件表達式檢查每一行。如果 type 是“分配”,則傳回 points 值;否則,傳回 0。
  • IF(type = 'issue', points, 0):這與上述內容相同,但對於 type = '問題'。
  • SUM(...)SUM() 函數計算每個條件表達式的總計,有效地分別對「分配」和「發布」類型的點進行求和。
  • GROUP BY budget_id:依 budget_id 將結果分組,提供每個預算的總金額。

範例:

針對 transactions 表執行查詢時,可能會產生以下結果集:

<code>budget_id | allocated | issued
----------|-----------|--------
     434  |   200000  |   100
     242  |   100000  |  5020
     621  |    45000  |  3940</code>

這展示了在單一最佳化的 MySQL 查詢中透過不同的條件過濾有效檢索多個聚合資料集。

以上是如何在 MySQL 中透過條件過濾高效檢索多個求和聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn