MySQL:透過條件過濾高效檢索多個求和聚合
使用資料庫通常需要根據不同的條件檢索多個資料集。 當處理單一查詢中的不同欄位值時,這可能會特別複雜。
挑戰:
考慮一個包含 transactions
、id
、account_id
、budget_id
和 points
欄位的 type
表。 目標是在單一查詢中檢索每個 points
的 budget_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中文網其他相關文章!