I have written this code to find “For each year, count the number of movies in that year that had only female actors”.
x
WITH
k AS
(SELECT MC.MID a
FROM M_CAST MC
JOIN PERSON P ON TRIM(P.PID) = TRIM(MC.PID)
WHERE TRIM(P.GENDER) IN ('Male', 'None'))
SELECT CAST(SUBSTR(M.year,-4) AS UNASSIGNED) Year, COUNT(DISTINCT TRIM(MID)) number_of_movies
FROM MOVIE M
WHERE TRIM(MID) NOT IN (SELECT a FROM k)
GROUP BY CAST(SUBSTR(M.year,-4) AS UNASSIGNED)
ORDER BY Year
I am getting this output –
Year Female_Movie_Count
1939 1
1999 1
2000 1
2009 1
2012 1
2018 2
When i had submitted this code, then i get response that “your output is wrong. when selecting non-female movies you should also include MID’s which have null PID’s in M_cast table as non-female movies too”. Hence i am a beginer in sql, i am not getting that where i am wrong. Please suggest me that where i need to modify this code.
Here is the schema – https://i.stack.imgur.com/sWRSN.png
Advertisement
Answer
You could use a UNION ALL with M_CAST where PID is NULL
as per your requirement
WITH
k AS
(SELECT MC.MID a
FROM M_CAST MC
JOIN PERSON P ON TRIM(P.PID) = TRIM(MC.PID)
WHERE TRIM(P.GENDER) IN ('Male', 'None')
UNION ALL
SELECT MC.MID a
FROM M_CAST MC
WHERE MC.PID IS NULL
)
SELECT CAST(SUBSTR(M.year,-4) AS UNASSIGNED) Year,
COUNT(DISTINCT TRIM(MID)) number_of_movies
FROM MOVIE M
WHERE TRIM(MID) NOT IN (SELECT a FROM k)
GROUP BY CAST(SUBSTR(M.year,-4) AS UNASSIGNED)
ORDER BY Year