2009-07-30 13 views
0

Obwohl ich gruppieren und nach einer Alias-Unterabfrage sortieren kann, kann ich den Alias ​​nicht in einer Where-Klausel verwenden. Muss ich stattdessen einen Join verwenden?MySQL Where-Klausel und Bestellung von avg() als Unterabfrage

Works:

SELECT entries.*, 
    (SELECT avg(value) 
    FROM `ratings` 
    WHERE ratings.entry_id = entries.id) as avg_rating 
FROM `entries` 
ORDER BY avg_rating DESC 

schlägt fehl ("unbekannte Spalte 'avg_rating' in where-Klausel"):

SELECT entries.*, 
    (SELECT avg(value) 
    FROM `ratings` 
    WHERE ratings.entry_id = entries.id) as avg_rating 
FROM `entries` 
WHERE avg_rating < '4.5000' ORDER BY avg_rating DESC 

Antwort

2

Unter Umständen können Sie dies mit einer HAVING-Klausel tun, anstelle einer WHERE

Syntax

3

ich würde eine Join tun und GROUPBY Zum Beispiel

SELECT entries.*, AVG(value) 
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id 
GROUP BY entries.* 
HAVING AVG(value) < '4.5000' 
ORDER BY AVG(value) 

Nur Pseudo-Code, würde ich auch empfehlen Sie die Einträge Spalten auf genau das, was Sie brauchen zu begrenzen.

Sie könnten in der Lage sein, mit den Alias ​​wegzukommen wie:

SELECT entries.*, AVG(value) as avg_value 
FROM entries INNER JOIN ratings ON entries.id = ratings.entry_id 
GROUP BY entries.* 
HAVING avg_value < '4.5000' 
ORDER BY avg_value