2015-02-15 2 views
0

Пусть следующую базу данных кино, где пользователь может критики кино и назначить оценку от 0 до 10, чтобы его критики:SQL делит два столбца

MOVIE (idMovie) 
    PK (idMovie) 
CRITICS (idMovie, user, score) 
    PK (idMovie, user) 
    FK (idMovie) REF MOVIE 
    NN score 

Как бы идти о показывая все идентификаторы фильмов, которые имеют их среднее значение критики оценивают более 80%? Что-то вроде:

WITH CMINUSEIGHT AS (
    SELECT C.idFilm, COUNT(C.idFilm) AS cpCount FROM CRITIQUE C 
    WHERE C.note > 8 
    GROUP BY C.idFilm), 
    AVERAGE AS (
    SELECT C.idFilm, (COUNT(C.idFilm)/CP.cpCount * 100) AS cmCount FROM CRITIQUE C, CPLUSHUIT CP 
    WHERE C.note < 9 
    GROUP BY C.idFilm) 
SELECT C.idFilm FROM CRITIQUE C, AVERAGE A 
    WHERE C.idFilm = A.idFilm 
    HAVING AVERAGE > 80; 

Спасибо.

ответ

1

Используйте AVG агрегатной функции для достижения этой цели:

SELECT 
    idMovie, 
    AVG(score) AS AvgScore 
FROM Critiques 
GROUP BY idMovie 
HAVING AVG(score) > 8 
Смежные вопросы