SQL - 查找列中具有最高计数的对象

时间:2014-10-30 19:07:05

标签: mysql sql count max

我正在回答有关IMDB数据库的问题,如下所示。 http://i.imgur.com/kj8qVgF.png

我需要找到哪个电视节目(这是一个显示为'电视连续剧'的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;显示在该列表中。

实施例: table

在此示例中,理想情况下,查询应返回" 3"因为那是影片最多的电影ID。

任何提示都将不胜感激。

1 个答案:

答案 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子句的更多信息。