正如@Eric所说,使用现代显式连接语法可能会完全避免这个问题。在actor表和两个子查询之间没有联接条件。所以你会得到每一个演员,每一个计数都超过平均值。
SELECT
a.first_name AS fname,
a.last_name AS lname,
fpa.num_films
FROM
actor as a
INNER JOIN (
SELECT
actor_id,
COUNT(film_id) AS num_films
FROM
film_actor
GROUP BY
actor_id
) AS fpa ON a.actor_id = fpa.actor_id
INNER JOIN (
SELECT
COUNT(*)/ COUNT(DISTINCT actor_id) AS avg_films_num
FROM
film_actor
) AS avg_films ON fpa.num_films > avg_films.avg_films_num
ORDER BY
fname,
lname
或者:
SELECT
a.first_name AS fname,
a.last_name AS lname,
fpa.num_films
FROM
actor as a
INNER JOIN (
SELECT
actor_id,
COUNT(film_id) AS num_films
FROM
film_actor
GROUP BY
actor_id
) AS fpa ON a.actor_id = fpa.actor_id
WHERE
fpa.num_films > (
SELECT
COUNT(*)/ COUNT(DISTINCT actor_id) AS avg_films_num
FROM
film_actor
)
ORDER BY
fname,
lname