2016-05-08 34 views
1

有一些問題已經是這樣,但我還沒有找到一個完全相同。MySQL總和只有特定的類別0否則

SELECT A.first_name, A.last_name, SUM(F.length) 
FROM actors A 
LEFT JOIN film_actors FA ON A.actor_id=FA.actor_id 
LEFT JOIN film F ON FA.film_id=F.film_id 
LEFT JOIN film_category FC ON FC.film_id=F.film_id 
LEFT JOIN category C ON FC.category_id=C.category_id 
WHERE C.name="Sci-Fi" 
GROUP BY A.last_name, A.first_name; 

我的問題是,我只需要總和科幻總和,但我需要報告所有演員。如果演員從未參加過科幻電影,他們應該在返回列表中,但長度爲0。 WHERE正在剪掉沒有科幻電影的那些,這是我不知道該怎麼做的問題。

+0

變化的WHERE AND,和(顯然)包括GROUP BY子句。如果不這樣做,考慮提供適當的CREATE和INSERT語句(和/或sqlfiddle)以獲得所需的結果。 – Strawberry

+0

我嘗試了AND的WHERE,並且讓它返回所有他們所在電影的SUM總數,可能是因爲左邊加入了。這可以用更簡單的查詢來完成。 – user2927848

+0

所以,現在你知道該怎麼做 – Strawberry

回答

1

嘗試用CASE ....當子句:

SELECT A.first_name, A.last_name, 
    SUM(CASE WHEN C.name="Sci-Fi" THEN F.length ELSE 0 END) 
FROM actors A 
LEFT JOIN film_actors FA ON A.actor_id=FA.actor_id 
LEFT JOIN film F ON FA.film_id=F.film_id 
LEFT JOIN film_category FC ON FC.film_id=F.film_id 
LEFT JOIN category C ON FC.category_id=C.category_id 
GROUP BY A.last_name, A.first_name; 
+0

啊以前沒見過CASE。這真的很好。對MySQL仍然很新鮮。 – user2927848

相關問題