2017-08-22 747 views
0

我剛開始學習MYSQL和滿足這樣的得到GROUP BY後AVG()在MYSQL

一個問題,所以該表是這樣的:
id name moneySpent 1 Alex 3 2 Alex 1 3 Bill 4 4 Alex 2 5 Alex 1 6 Chris 5 7 Chris 3 可以說,我想知道每人平均花費的錢。我嘗試這樣做,通過SUM()GROUP BY和AVG(),但我被困在AVG()

SELECT name, sum(moneySpent) AS total FROM table GROUP BY name; 

,那麼這將返回

name total 
Alex 7 
Bill 4 
Chris 8 

然後,我怎樣才能得到一個(7 + 4 + 8)/ 3使用AVG()?

+0

'... UNION ALL從table' – jarlh

回答

0

可以使用得到每人平均:

SELECT AVG(total) AS AVERAGE 
FROM (SELECT name, sum(moneySpent) AS total 
     FROM table GROUP BY name) A 
    ; 

輸出:

AVERAGE 
6,3333 
+0

選擇 '平均',SUM(moneySpent)/計數(不同的名字)所以這就像我用表來存儲第一個SELECT結果並在這個新表上做AVG()?感謝您的回答,但我想知道我是否可以避免額外的空間?不要責怪我,如果我得到這個錯誤,請我開始學習SQL。 –

0

您可以使用內部查詢來獲取sum和外部查詢到如下的總和得出average

SELECT Avg(sum1) FROM (
SELECT Sum(amount) AS sum1 
FROM table1 
GROUP BY NAME 
) T1 

它會在下面的輸出中生成。

AVERAGE_AMOUNT_SPENT 
------------------ 
6.3333 

這是你想要的是輸出即(7+4+8)/3 = 6.333

您可以查看演示here

0

所以有2種方式來做到這一點,首先是使用新表來存儲SELECT結果。這是更多的意思,但可能需要更多的空間。 其次是jarlh,在我看來,我並不需要GROUP BY整個表格,我只需將所有的錢都加起來,並用不同的名字數除以。 謝謝大家!

0
select avg(total) as average from (SELECT name, sum(moneySpent) AS total FROM table GROUP BY name); 

您可以使用此查詢來獲取所需輸出

OUTPUT: AVERAGE 6.3333333333333333