2014-10-30 31 views
0

我正在回答有關IMDB數據庫的問題,如下所示。 http://i.imgur.com/kj8qVgF.pngSQL - 在列中查找具有最高計數的對象

我需要找到哪些電視節目(這是顯示爲「電視連續劇」一個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」。

實施例: table

在這個例子中,該查詢應理想地返回「3」,因爲這是具有最多的女演員在電影ID。

任何提示將不勝感激。

+1

你問了很多關於你的作業的問題,在某些時候你需要自己回答他們 – Lamak 2014-10-30 19:10:14

+0

不應該由「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

回答

1

這是一個簡單的修復,可能只是您的錯誤。

您收到錯誤是因爲您在HAVING子句中放置了一個常規條件。 HAVING用於有關集合函數的條件。

例如,如果你試圖用一個總大於2只選擇行,您使用具有:

HAVING total > 2 

但是,你要需要在WHERE子句中去的。試試這個:

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) 
    JOIN role_type r 
    ON (r.id = c.role_id) 
    WHERE r.role = 'actress' AND k.kind = 'tv series' 
    GROUP BY t.title 
    ORDER BY total DESC 
    ) as newTable 
LIMIT 1 

這是關於HAVING條款的更多信息。

+1

哦,我明白了。這真是愚蠢的我。感謝您的鏈接! – 2014-10-31 04:02:55

+0

@joeBalin沒問題,對這個項目好運。 – AdamMc331 2014-10-31 04:27:27

相關問題