2015-11-05 108 views
1

我有一個表:Mysql:如何計算兩個avg之間的差異?

+------------+--------------+-------+------------+ 
| Name  | Nation  | Score | Game_date | 
+------------+--------------+-------+------------+ 
| Ginobili | Argentina | 48 | 2005-01-21 | 
| Irving  | Australia | 44 | 2014-04-06 | 
| Kirilenko | Soviet Union | 31 | 2006-11-11 | 
| Kobe  | USA   | 81 | 2006-01-22 | 
| LeBron  | USA   | 52 | 2014-12-06 | 
| Mutombo | Congo  | 39 | 1992-02-03 | 
| Nowitzki | Germany  | 48 | 2011-05-18 | 
| PauGasol | Spain  | 46 | 2015-01-11 | 
| SteveNash | Canada  | 42 | 2006-12-08 | 
| TonyParker | France  | 55 | 2008-11-06 | 
| YaoMing | China  | 41 | 2009-02-23 | 
| YiJianlina | China  | 31 | 2010-03-27 | 
+------------+--------------+-------+------------+ 

我要計算的AVG(分數)美國 - 中國的AVG(分數)。

我已經試過

select avg(score) from nba where nation = "USA" - 
avg(score) from nba where nation = "China"; 

但它是錯的!

回答

0

您可以使用AVGCASE WHEN

SELECT AVG(CASE WHEN nation = 'USA' THEN score END) - 
     AVG(CASE WHEN nation = 'China' THEN score END) AS result 
FROM nba 
WHERE nation IN ('USA', 'China'); 

另一種選擇是使用UNION:年底前

SELECT SUM(sub.r) AS result 
FROM (SELECT avg(score) AS r 
     from nba 
     where nation = 'USA' 
     UNION ALL 
     SELECT -avg(score) 
     from nba 
     where nation = 'China') AS sub 
+0

會不是這樣的短語需要一個 '否則爲0'? –

+0

@WhirlMind在SQL Server中,如果未提供ELSE NULL,則爲默認值。在MySQL中不需要看[demo](http://sqlfiddle.com/#!9/9eecb7d/29291/0):)無論如何你不能添加'ELSE 0',因爲它會改變結果。 AVG僅適用於非價值 – lad2025

+0

現在我看到UNION選項,我想這可能是一個完美的選擇。 另外兩件事情,就案例而言: (a)在SQL Server中,假定null可能會導致聚合嘗試出現空警告? (b)如果我們確實包括了0,那麼平均值是否會將總數除以合格行數或所有行數? –

相關問題