MySQL如何在不直接支援「SUM IF」和「COUNT IF」的情況下有效實現條件聚合?

Susan Sarandon
發布: 2024-11-15 00:58:02
原創
668 人瀏覽過

How can MySQL effectively achieve conditional aggregations without direct support for 'SUM IF' and 'COUNT IF'?

優雅的解決方案:克服MySQL 中「SUM IF」和「COUNT IF」的限制

儘管它們很有用,但MySQL缺乏直接支援對於“SUM IF”和“COUNT IF”函數。在處理條件聚合時,這種限制通常會令人沮喪。但是,有一個使用 CASE 語句的優雅解決方案。

考慮以下場景:

| id | hour | kind |
|---|---|---|
| 1 | 10 | 1 |
| 2 | 15 | 2 |
| 3 | 20 | 1 |
| 4 | 25 | 3 |
登入後複製

目標是計算:

  • 記錄總數
  • 總小時數
  • 」 kind」的記錄數等於1

原始嘗試和MySQL 的回應:

使用'SUM( IF(...) )' 或'COUNT( IF(... ) )' 會導致錯誤。 MySQL 不允許將聚合函數與「IF」等控制結構混合使用。

使用 CASE 語句的解:

CASE 語句提供了條件表達式來動態求值並傳回價值觀。它可用於有效地實現所需的條件聚合。操作方法如下:
SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne
登入後複製

此查詢執行以下操作:
  • count(id):計算記錄總數。
  • SUM(hour) :計算總小時數。
  • SUM(case when kind = 1 then 1 else 0 end): 使用 CASE 語句有條件地計算 'kind' 等於 1 的記錄數。

輸出:

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |
登入後複製

By利用CASE語句,我們可以優雅地克服MySQL中「SUM IF」和「COUNT IF」的限制,從而實現高效的條件判斷聚合。

以上是MySQL如何在不直接支援「SUM IF」和「COUNT IF」的情況下有效實現條件聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板