MySQL获取所有比平均外观更多的行
我有一个演员表,每个演员都出现在不同的电影中,我试着只选择那些出场次数超过每个演员平均出场次数的演员 这是我的尝试,但结果产生了相同的名称和不同的外观值,因此我认为我有一个错误MySQL获取所有比平均外观更多的行,mysql,sql,Mysql,Sql,我有一个演员表,每个演员都出现在不同的电影中,我试着只选择那些出场次数超过每个演员平均出场次数的演员 这是我的尝试,但结果产生了相同的名称和不同的外观值,因此我认为我有一个错误 SELECT a.first_name AS fname, a.last_name AS lname, films_per_actor.num_films FROM actor as a, ( SELECT AVG(num_films) AS avg
SELECT
a.first_name AS fname,
a.last_name AS lname,
films_per_actor.num_films
FROM
actor as a,
(
SELECT
AVG(num_films) AS avg_films_num
FROM
(
SELECT
COUNT(film_id) AS num_films,
a.actor_id
FROM
film_actor as f_a,
actor as a
WHERE
f_a.actor_id = a.actor_id
GROUP BY
actor_id
) as films_per_actor1
) as avg_films,
(
SELECT
COUNT(film_id) AS num_films,
a.actor_id
FROM
film_actor as f_a,
actor as a
WHERE
f_a.actor_id = a.actor_id
GROUP BY
actor_id
) as films_per_actor
WHERE
films_per_actor.num_films > avg_films.avg_films_num + 10
ORDER BY
fname,
lname
但结果是
"ADAM" "GRANT" "40"
"ADAM" "GRANT" "39"
"ADAM" "GRANT" "42"
"ADAM" "GRANT" "41"
"ADAM" "HOPPER" "40"
"ADAM" "HOPPER" "39"
"ADAM" "HOPPER" "42"
"ADAM" "HOPPER" "41"
"AL" "GARLAND" "40"
"AL" "GARLAND" "39"
"AL" "GARLAND" "41"
"AL" "GARLAND" "42"
"ALAN" "DREYFUSS" "39"
"ALAN" "DREYFUSS" "40"
"ALAN" "DREYFUSS" "42"
"ALAN" "DREYFUSS" "41"
正如@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
在没有任何数据的情况下解码您的查询对我们来说有点太多了。请分享示例输入和预期输出。Mayank,非常感谢您的回答,我们将上传一个经过编辑的最小问题,谢谢!草莓,有时候,我真不敢相信这里有多少人会因为它是虚拟的,什么都可以说而充满了自己。我明白你的幽默,但我会因为留下这样的评论而受到惩罚。小心点,我的朋友。使用合适的
加入。它已经存在超过20年了。样本输入???没有数据可供测试时,我们如何提供帮助?