Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] WHERE na podstawie obliczonej kolumny
Forum PHP.pl > Forum > Przedszkole
qrzysztof
Mam 2 tabele:

1)"Filmy" z polami:

  • id
  • tytul


2)"Oceny" z polami:
  • id
  • ocena
  • id_filmu
  • id_uzytkownika


Chciałbym otrzymać listę tytułów (wraz z id), które mają ŚREDNIĄ ocenę >4.


Poniższe wyrażenie daje mi listę wszystkich tytułów wraz z obliczoną dla każdego średnią ocen. Nie wiem jednak jak zastosować do tego jeszcze 1 warunek (średnia ocen>4). Wymagałoby to operacji na kolumnie obliczonej jaką jest AVG(ocena) a tego mi WHERE nie chce przyjąć. Jak najprościej osiągnąć zamierzony efekt?

  1. SELECT Oceny.id_filmu, Filmy.tytul, AVG(ocena) AS srednia FROM Oceny INNER JOIN Filmy ON Oceny.id_filmu=Filmy.id GROUP BY id_filmu
phpion
Musisz tutaj zastosować HAVING. To taki odpowiednik WHERE dla funkcji agregujących (jak wykorzystana przez Ciebie AVG()).
tehaha
spróbuj
  1. SELECT Oceny.id_filmu, Filmy.tytul, AVG(ocena) AS srednia FROM Oceny INNER JOIN Filmy ON Oceny.id_filmu=Filmy.id WHERE srednia > 4 GROUP BY id_filmu


@up: a WHERE nie zadziała w tym przypadku?
qrzysztof
No właśnie niestety nie.

  1. #1054 - Unknown column 'srednia' in 'where clause'
tehaha
no to spróbuj z tym HAVING, tak jak phpion mówił:
  1. SELECT Oceny.id_filmu, Filmy.tytul, AVG(ocena) AS srednia FROM Oceny INNER JOIN Filmy ON Oceny.id_filmu=Filmy.id HAVING srednia > 4 GROUP BY id_filmu
qrzysztof
Nie zauważyłem wcześniej posta phpiona - HAVING działa. Dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.