SQL - 在列中查找具有最高计数的对象
我正在回答有关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。
任何提示将不胜感激。
这是一个简单的修复,可能只是您的错误。
您收到错误是因为您在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条款的更多信息。
哦,我明白了。这真是愚蠢的我。感谢您的链接! – 2014-10-31 04:02:55
@joeBalin没问题,对这个项目好运。 – AdamMc331 2014-10-31 04:27:27
你问了很多关于你的作业的问题,在某些时候你需要自己回答他们 – 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