首頁  >  文章  >  資料庫  >  如何在 MySQL 中使用 SQL 計算不同遍的平均值?

如何在 MySQL 中使用 SQL 計算不同遍的平均值?

Linda Hamilton
Linda Hamilton原創
2024-10-30 18:50:30845瀏覽

How to Calculate Average Values for Different Passes Using SQL in MySQL?

使用SQL計算不同pass的平均值

在MySQL中,透過AVG和GROUP BY可以實現對資料分組檢索平均值功能。但是,當處理多個條件時,例如計算特定列的不同值的平均值,任務會變得稍微複雜一些。

在這種情況下,目標是提取“val”列的平均值對於每個唯一的“id”,對應不同的“pass”值,範圍可能從 1 到 7。

子查詢解

一種方法是使用子查詢AVG 函數中「pass」的每個值。這將為每個“id”和“pass”組合傳回一組值。

<code class="sql">SELECT d1.id,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 1) as val_1,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 2) as val_2,
    [...]
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 7) as val_7
from data_r1 d1
GROUP BY d1.id</code>

此查詢首先從「data_r1」表中取得唯一的「id」值。然後,對於每個“id”,它執行七個子查詢來計算“pass”每個可能值的平均值,並將它們儲存為單獨的“val_n”列。 IFNULL 函數用於處理子查詢傳回 NULL 值的任何情況,確保結果是數字或零。

這種方法的優點是它為每個「id」傳回一行,使處理結果變得更加容易。然而,它可能有點冗長,特別是當「pass」有很多可能的值時。

替代方法

如果您喜歡更簡潔的方法,您可以使用GROUP BY 和CASE 語句的組合來實現類似的結果:

<code class="sql">SELECT id,
       SUM(CASE WHEN pass = 1 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 1 THEN id END) AS val_1,
       SUM(CASE WHEN pass = 2 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 2 THEN id END) AS val_2,
       [...]
       SUM(CASE WHEN pass = 7 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 7 THEN id END) AS val_7
FROM data_r1
GROUP BY id</code>

此查詢使用多個CASE 語句來計算'pass' 值,並且在計算中僅包含對應的'val' 值。分母中的 COUNT(DISTINCT ...) 表達式可確保正確計算平均值,即使特定「id」和「pass」組合有多個「val」值也是如此。

再一次, IFNULL 函數可用於處理除法結果為 NULL 的任何情況,以確保輸出是數字或零。

無論您選擇哪種方法,這些查詢都將有效提取 的平均「val」值「data_r1」表中「pass」的不同值的每個唯一「id」。

以上是如何在 MySQL 中使用 SQL 計算不同遍的平均值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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