我是MySQL新手;我正在使用SAS,我的大脑以SAS风格扭曲。 所以,即使我认为我看到人们提出类似于我的问题,我仍然无法理解他们收到的答案。我为它道歉。
我有两张桌子:
包含列的film_category:
category_id,film_id,
,包含列的film_actor
actor_id, film_id.
我在film_id上加入了他们
。问题是: 每个电影类别中最受欢迎的演员是什么? 共有16个类别,200个演员,1000部电影。
SELECT film_actor.actor_id,MAX(COUNT(actor_id))
FROM film_actor JOIN film_category
ON film_actor.film_id = film_category.film_id
GROUP BY film_category;
果然,只要我加上MAX,我就会收到错误1111 ... 如果我的问题不明确,请告诉我。 谢谢! -Vera
答案 0 :(得分:1)
这是您的查询:
SELECT fa.actor_id, MAX(COUNT(fa.actor_id))
FROM film_actor fa JOIN
film_category fc
ON fa.film_id = fc.film_id
GROUP BY fc.film_category;
这是无效的,因为您无法嵌套聚合函数。
要做你想做的事,请使用子查询和聪明的聚合:
select film_category, max(numfilms) as maxnumfilms,
substring_index(group_concat(actor_id order by numfilms desc), ',', 1) as actor_id
from (select fc.film_category, fa.actor_id, count(*) as numfilms
from film_actor fa join
film_category fc
on fa.film_id = fc.film_id
group by fc.film_category, fa.actor_id
) ac
group by film_category;
答案 1 :(得分:0)
发生最多的演员: SELECT category_id AS cid, (SELECT actor_id FROM film_actor加入film_category ON film_actor.film_id = film_category.film_id WHERE category_id = cid GROUP BY actor_id 按COUNT(*)DESC排序 LIMIT 0,1)AS topActor 来自film_actor JOIN film_category ON film_actor.film_id = film_category.film_id GROUP BY category_id;