2016-11-19 147 views
0

我似乎很困難,看起來很簡單的問題。隨着數據如下表SQL - 'group by'沒有給出預期的結果

table1的
num_users | time_taken 
---------------------- 
10.1  | 11.2 
10.1  | 11.5 
10.2  | 11.1 
10.4  | 11.9 
11.01  | 12.2 
11.1  | 11.8 
11.7  | 13.2 
11.72  | 13.1 

我要計算平均。 time_taken將每個num_users的值舍入到十進制的0。這是我試過的。

select 
round(num_users,0) as num_users 
, round(avg(time_taken),1) as time_taken 
from table1 as a 
group by a.num_users 
order by a.num_users 

然而,這給出了每個不同num_users值(四捨五入至0位)多行 - 這裏有什麼想法?

預期輸出
num_users | time_taken 
    ---------------------- 
    10  | 11.4 
    11  | 12.0 
    12  | 13.2 

回答

2

重複在group by表達:

select round(num_users, 0) as num_users, 
     round(avg(time_taken), 1) as time_taken 
from table1 as a 
group by round(num_users, 0) 
order by round(num_users, 0); 

我說,重複它,因爲表達式的名稱相同的列名。或者,你可以寫:

select round(num_users, 0) as new_num_users, 
     round(avg(time_taken), 1) as time_taken 
from table1 as a 
group by new_num_users 
order by new_num_users; 

甚至:

group by 1 
order by 1 

即使你刪除從group by a.num_users預選賽,Postgres將仍然把它解釋爲列名,而不是新的別名。

+0

它工作,簡潔的解釋。 – user3206440