我正在回答有關IMDB數據庫的問題,如下所示。 SQL - 在列中查找具有最高計數的對象
我需要找到哪些電視節目(這是顯示爲「電視連續劇」一個kind_type)擁有多數情節,演員,和季節(這是問題的不同部分)。 要開始了,我寫了一個查詢找到的電視節目具有最多的女演員的名字:
SELECT *
FROM (
SELECT DISTINCT t.title, count(t.title) total
FROM title t
INNER JOIN kind_type k
ON (t.kind_id = k.id)
INNER JOIN cast_info c
ON (c.movie_id = t.id)
CROSS JOIN role_type r
GROUP BY t.title
HAVING r.role = 'actress' AND k.kind = 'tv series'
ORDER BY total DESC
) as newTable
LIMIT 1
但是,我得到的錯誤:
column "r.role" must appear in the GROUP
BY clause or be used in an aggregate function
LINE 11: HAVING r.role = 'actress' AND k.kind = 'tv series'
所以,你可以把它想象因爲有很多cast_info對象,每個對象都附加到role_type對象。每個cast_info也有一個用於movie_id的變量,並且我的目標是選擇一個包含角色「actress」的role_types的所有cast_info對象列表,然後挑選出現在該列表中的最常出現的「movie_id」。
實施例:
在這個例子中,該查詢應理想地返回「3」,因爲這是具有最多的女演員在電影ID。
任何提示將不勝感激。
你問了很多關於你的作業的問題,在某些時候你需要自己回答他們 – Lamak 2014-10-30 19:10:14
不應該由「INNER JOIN role_type r ON c.ID = r。」的「CROSS JOIN role_type r」 ID」? CROSS JOINing極大地影響邏輯,因爲現在角色女演員與title + kind_type + cast_info中的每個行集關聯,並且這可能是錯誤的原因。我期望改變連接將解決你的問題,但我自己會把你在WHERE子句中的HAVING子句中。 – 2014-10-31 00:58:52