2012-04-02 6 views
0

Ich habe ein Thema, und verschiedene Nutzer bewerten einen Film in 3 verschiedenen Typen.SQL-Berechnung Durchschnitt für die Bewertung mit verschiedenen Typen

sagen, dass ich Thread 22, und verschiedene Typen = movie.quality, movie.story and movie.imdb

so die Struktur der Rating-Tabelle sieht wie folgt aus:

| ID | thread_id | user_id | type    | value 
| 12 | 22  | 2  | 'movie.imdb'  | 8.5 
| 23 | 22  | 4  | 'movie.imdb'  | 7.5 
| 42 | 22  | 5  | 'movie.story' | 8.5 
| 56 | 22  | 6  | 'movie.quality' | 8.5 
| 76 | 22  | 6  | 'movie.imdb'  | 7.53 

als Ergebnis meiner Anfrage, ich den Durchschnitt erhalten möchten Pro-ID und Typ, so etwas wie

array(thread_id=22 => array(
         type=>movie.imdb => average=>8.2), 
         type=>movie.story => average=>8.8), 
         type=>movie.quality => average=>8.1)) 

Wie kann ich diese Abfrage strukturieren?

Antwort

1

Sie können Gruppe tun, indem thread_id, Typ und kann AVG nehmen Wert

select thread_id,type, avg (value) 
from rating 
group by thread_id,type 

nun vom Ausgang dieser Abfrage, die Sie auf der thread_id Basis wählen können Ihr Code, um das Array zu machen/bilden .. oder genauer Array oder Array ..

+0

SELECT Thread, TYPE, AVG (Wert), COUNT (*) von Bewertung WHERE Thread = 25 GROUP BY Thread, TYPE, funktioniert wie ein Charme, danke. – Confidence

2

Durch Gruppierung:

select `type`, avg(`value`) 
from ratings 
where `thread_id` = 22 
group by `type` 
+0

basierend auf Ihrer Antwort SELECT TYPE, AVG ('Wert') VON Bewertung WHERE Thread = 25 GROUP BY 'Typ'; funktioniert nicht :(= zeigt Durchschnitt als 0 und zeigt nur einen Typ an, nicht alle Typen. – Confidence

+1

Das ist '\' type \ '', nicht ''type'' - dh Backticks, keine einfachen Anführungszeichen. * big ** Unterschied –

Verwandte Themen