[英]How to calculate an average for each entire name and repeat the value?
我在mysql數據庫中有一個表,如下所示:
Name Val
bb 5
bb 10
kk 12
kk 8
jj 6
jj 15
我想計算每個名稱的平均值,並使用合適的名稱重復結果,如下所示:
Name Val Avg(Val)
bb 5 7.5
bb 10 7.5
kk 12 10
kk 8 10
jj 6 10.5
jj 15 10.5
我有一個查詢語句,其表名稱類似於“ varcalc”,但僅適用於一個特定值:
SELECT Name, Val, (SELECT AVG(Val) FROM varcalc WHERE name="bb") FROM varcalc
如何調整我的陳述,使結果看起來像第二張表?
SELECT Name,AVG(Val) AS Avg FROM varcalc GROUP by Name
這將為您顯示所有名稱的數據。 但是,為了計算該平均值,這些名稱將不會一次又一次地重復。 一遍又一遍地計算這些值與平均值的邏輯相反。
為什么不重復這些行?
假設您有100萬個名稱,任何使用額外的子查詢來重復AVG
值的操作都會使數據庫無緣無故地一次又一次地計算平均值。 每個名稱只能計算一次。 然后,您可以根據需要在網站上顯示它。
嘗試這個:
SELECT Name, Val, (SELECT AVG(Val) FROM varcalc v2 WHERE v1.name=v2.name) FROM varcalc v1
結合使用JOIN
和子查詢:
SELECT
varcalc.*,
avg_name.avg_val
FROM
varcalc
LEFT JOIN
(SELECT AVG(Val) AS avg_val, Name FROM varcalc GROUP BY Name) AS avg_name
ON varcalc.Name=avg_name.Name
-因此您將獲得每行重復的每個Name
平均值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.