2015-07-11 71 views
0

我有幾個包含電影,演員和類別數據的相關表格。我試圖將每部演員的電影長度總結在一個特定的類別中。SQL:選擇一個子查詢的總和

這就是我要嘗試,包括一個類別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列只包含所有空值。

此查詢的工作,但不包括誰有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 
+0

嘗試改變你的使用語句到左連接,這就是爲什麼它不會包括與0連接。只是說明「連接」是內部連接。 – Reisclef

回答

0

這裏就是我得到了到我需要的:

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 
0

你需要一個外部聯接和標準:

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 
0

在第一個查詢您要添加的所有類別的長度,無論演員的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 
+0

現在我在總結列中獲得值,但他們看起來不正確。我知道至少30名演員在類別14中有0分鐘,但所有結果都顯示爲1000+分鐘。 – Josh

+0

在第一個查詢中,您將所有類別14電影的長度加起來,無論演員是誰, – symcbean

+0

對,我更新了我的代碼來匹配你的,但總數異常高,並且都不是0. – Josh