2016-05-09 11 views
0

Ich habe die folgende Tabelle:wählen Durchschnitt von durchschnittlich

rating 
-------- 
| id | account_id | room | kitchen | bathroom | 
----------------------------------------------- 
| 1 | 1   | 5 | 5  | 5  | 
| 2 | 1   | 2 | 4  | 1  | 
| 3 | 1   | 5 | 2  | 1  | 
----------------------------------------------- 

Menschen können das Zimmer, Küche und Bad bewerten (1 bis 5).

Durchschnittliche Bewertung für ID = 1: 5 (da 15/3 = 5)

Durchschnittliche Bewertung für ID = 2: 2.3333 (weil 7/3 = 2,33333)

Durchschnittliche Bewertung für ID = 3 : 2,6666 (weil 8/3 = 2,66665)

Erste Frage

Wie Sie die durchschnittliche Bewertung für ID sehen, = 2 => 2.3333 ... und für ID = 3 => 2,6666. Wie kann ich floor() und ceil() erstellen? (wenn < .5 => floor, wenn> .5 => ceil), so dass die durchschnittliche Bewertung für ID = 2 wird 2 (statt 2.3333) und die durchschnittliche Bewertung für ID = 3 wird 3 (statt 2.6666 .. .)

Zweite Frage

ich die durchschnittliche Bewertung der durchschnittlichen Bewertungen auswählen möchte (so. die durchschnittliche Bewertung von allen Reihen zusammen) Also - wenn floor() und ceil() benutzt werden, habe ich 3 durchschnittliche Bewertungen: 5, 2 und 3 => 10/15 => 3. Wie komme ich an die 3?

Vielen Dank im Voraus!

+0

1. Normalisierung Siehe – Strawberry

Antwort

1

Für die erste Frage ist die Antwort round():

select round((room + kitchen + bathroom)/3) 

Für die zweite, würden Sie nur Aggregation verwenden:

select avg(room + kitchen + bathroom) 
from ratings; 

Wenn Sie den Mittelwert der gerundeten Ergebnisse wollen:

select round(avg(round(room + kitchen + bathroom))) 
from ratings; 

Allerdings scheint mir das seltsam.

0

Verwenden Sie ROUND Funktion.

Abfrage

SELECT id, ROUND(((room + kitchen + bathroom)/3), 0) as `average` 
FROM rating 
GROUP BY id; 
Verwandte Themen