首頁 >資料庫 >mysql教程 >如何在單一 SQL 查詢中有效地組合多個類似 WHERE 子句的條件?

如何在單一 SQL 查詢中有效地組合多個類似 WHERE 子句的條件?

Patricia Arquette
Patricia Arquette原創
2025-01-21 12:53:09292瀏覽

How Can I Efficiently Combine Multiple WHERE Clause-like Conditions in a Single SQL Query?

高效資料擷取:巧妙組合多個WHERE條件

假設您需要根據兩組不同的條件從表格中檢索資料。例如,考慮一個名為「transactions」的表,該表記錄財務操作,並包含諸如「account_id」、「budget_id」、「points」和「type」之類的欄位。

為了有效率地從該表中檢索特定數據,您可能需要組合多個WHERE子句。例如,您可能需要確定表格中每個唯一的「budget_id」分配和發放的總積分。

查詢構思

您需要建立的查詢應類似於以下內容:

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

讓我們深入研究此查詢的每個組成部分,以了解它是如何實現您的目標的:

SUM(CASE WHEN ... THEN ... ELSE ... END) 函數:

此函數用於根據指定的「type」有條件地對「points」列求和。當“type”為“allocation”時,它會計算滿足此條件的所有行的“points”總和。類似地,它計算“type”等於“issue”的行的“points”之和。 (此處將IF函數替換為更標準的CASE WHEN,提高程式碼可讀性和相容性)

GROUP BY budget_id:

此子句按「budget_id」欄位將擷取的資料分組。因此,查詢為表中的每個不同的「budget_id」提供一行單獨的結果。

WHERE 子句的組合:

此查詢中明顯缺少WHERE子句,因為所需的篩選是在SUM()函數內完成的。具體來說,該函數包含條件,以根據“type”列選擇性地包含行。

預期輸出:

您建立的查詢將輸出一個表,其中包含「budget_id」、「allocated」和「issued」欄位。 「allocated」欄位表示與每個「budget_id」的「allocation」事務相關的積分總和,「issued」欄位表示對應「budget_id」的「issue」事務的累積積分。

以上是如何在單一 SQL 查詢中有效地組合多個類似 WHERE 子句的條件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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