我正在回答有关IMDB数据库的问题,如下所示。
我需要找到哪个电视节目(这是一个显示为'电视连续剧'的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&# 39;显示在该列表中。
实施例:
在此示例中,理想情况下,查询应返回" 3"因为那是影片最多的电影ID。
任何提示都将不胜感激。
答案 0 :(得分: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子句的更多信息。