高效資料擷取:巧妙組合多個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中文網其他相關文章!