2016-11-19 3 views
0

Ich habe Schwierigkeiten mit, was scheint ein einfaches Problem sein. Mit Daten, wie in der folgenden TabelleSQL - `Gruppe von` nicht zu erwartende Ergebnisse

tabelle1
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 

Ich mag die avg berechnen. time_taken für jeden num_users Wert auf 0 dezimal gerundet. Hier ist, was ich versucht habe.

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 

Jedoch geben diese mehrere Zeilen für jeden einzelnen num_users Wert (gerundet auf 0 dezimal) - alle hier Ideen?

erwartete Ausgabe
num_users | time_taken 
    ---------------------- 
    10  | 11.4 
    11  | 12.0 
    12  | 13.2 

Antwort

2

Wiederholen Sie den Ausdruck in der 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); 

ich sagen, es zu wiederholen, weil der Name des Ausdrucks der gleiche wie der Name der Spalte ist. Alternativ könnten Sie schreiben:

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; 

Oder auch:

group by 1 
order by 1 

Auch wenn Sie die Qualifikation von der group by a.num_users fallen, wird Postgres es immer noch als Spaltenname interpretieren, anstatt den neuen Alias-Namen.

+0

es funktioniert, kurze Erklärung. – user3206440