![](/img/trans.png)
[英]SQL/MySQL: SELECT sum() with JOIN VS SELECT with subselect/subquery
[英]SQL: Select the sum of a subquery
我有一些相关的表格,其中包含电影,演员和类别数据。 我试图总结每个演员在特定类别中的电影长度。
这是我必须尝试在结果中包括类别ID子查询总和的内容:
SELECT actor.actor_id, (SELECT SUM(length) from film WHERE category_id=14) total
FROM actor
JOIN film_actor USING(actor_id)
JOIN film USING(film_id)
JOIN film_category USING(film_id)
JOIN category USING(category_id)
GROUP BY actor.actor_id
ORDER BY total DESC
但是,我的total
列仅包含所有NULL值。
此查询有效,但不包括该类别中有0分钟价值电影的演员:
SELECT actor.actor_id, SUM(film.length) as total
FROM actor
JOIN film_actor USING(actor_id)
JOIN film USING(film_id)
JOIN film_category USING(film_id)
JOIN category USING(category_id)
WHERE category_id = 14
GROUP BY actor.actor_id
您需要一个外部联接,并且类别上的条件属于外部联接的on子句:
select a.actor_id,
sum(f.length) as total
from actor a
join film_actor fa
on a.actor_id = fa.actor_id
join film f
on fa.film_id = f.film_id
left join film_category fc
on fc.film_id = f.film_id
and fc.category_id = 14
group by a.actor_id
在第一个查询中,您将累加所有14类电影的长度,与演员无关,因此您将为每个演员看到相同的值。 如果所有值均为空,则类别14中没有电影。
我怀疑您想为每个演员加起来14类电影的长度....
SELECT actor.actor_id, SUM(IFNULL(film.length, 0))
FROM actor
JOIN film_actor USING(actor_id)
JOIN film USING(film_id)
LEFT JOIN film_category
ON film_category.film_id=film.film_id
AND film_category.category_id=14
GROUP BY actor.actor_id
这是我所需要的方法:
SELECT actor.actor_id, SUM(film.length) as total
FROM actor
JOIN film_actor USING(actor_id)
LEFT JOIN film on film_actor.film_id = film.film_id AND film.film_id IN (SELECT film_id FROM film_category WHERE film_category.category_id = 14)
GROUP BY actor.actor_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.