簡體   English   中英

如何計算每個全名的平均值並重復該值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM