在MySQL WHERE 子句中使用SUM() 進行查詢
使用MySQL 表時,可能需要根據聚合計算檢索行,例如先前值的總和。但是,直接在 WHERE 子句中使用 SUM() 可能不會產生預期結果。
假設您有一個包含「id」和「cash」列的表:
id | cash 1 200 2 301 3 101 4 700
要檢索先前所有現金總和超過特定值(例如500)的第一行,使用WHERE SUM(cash) > 500 將無法如預期般運作。
使用 HAVING 子句的解決方案
MySQL 允許在 HAVING 子句而不是 WHERE 子句中進行聚合比較。要獲得所需的結果,您可以使用以下查詢:
GROUP BY ... HAVING SUM(cash) > 500
但是,這需要定義 GROUP BY 子句,這可能不是必需的。
使用巢狀帶有運行總計的子查詢
另一種方法是使用巢狀子查詢來計算運行總計,然後將其與WHERE 子句中的指定值進行比較:
SELECT y.id, y.cash FROM (SELECT t.id, t.cash, (SELECT SUM(x.cash) FROM table x WHERE x.id <= t.id) AS running_total FROM table t ORDER BY t.id) y WHERE y.running_total > 500 ORDER BY y.id LIMIT 1
In在該查詢中,子查詢用於計算表中每一行的運行總計。別名 running_total 用於在 WHERE 子句中引用該值。新增 LIMIT 子句以僅傳回符合條件的第一行。
這種方法可以直接比較 WHERE 子句中的聚合值,並產生所需的結果,而不需要 GROUP BY 子句。
以上是如何在MySQL中查詢先前值總和超過閾值的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!