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

Mysql SQL-查找列中计数最高的对象,mysql,sql,count,max,Mysql,Sql,Count,Max,我正在回答有关IMDB数据库的问题,如下所示。 我需要找出哪个电视节目(这是一种以“电视连续剧”形式出现的类型)有最多的插曲、演员和季节(这些是问题的独立部分)。 首先,我写了一个查询,查找女演员最多的电视节目的名称: 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_inf

我正在回答有关IMDB数据库的问题,如下所示。

我需要找出哪个电视节目(这是一种以“电视连续剧”形式出现的类型)有最多的插曲、演员和季节(这些是问题的独立部分)。 首先,我写了一个查询,查找女演员最多的电视节目的名称:

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_类型的对象。每个cast_info也有一个movie_id变量,我的目标是选择所有cast_info对象的列表,这些对象的角色类型为“actor”,然后选择该列表中出现频率最高的“movie_id”

例如:

在本例中,查询最好返回“3”,因为这是女演员最多的电影ID


任何提示都将不胜感激。

这是一个简单的修复方法,可能只是您的一个错误

您收到错误是因为您在HAVING子句中放入了一个常规条件。have用于有关聚合函数的条件

例如,如果试图仅选择总计大于2的行,则使用have:

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

这是关于这一条款的更多信息。

你已经问了很多关于你的作业的问题,在某个时候你需要自己回答,你的“交叉连接角色类型r”不应该是“c.ID=r.ID上的内部连接角色类型r”?交叉连接极大地扭曲了逻辑,因为现在角色女演员与title+kind\u type+cast\u info中的每个行集相关联,这可能是错误的原因。我希望更改连接可以解决您的问题,尽管我自己会将HAVING子句中的内容放在WHERE子句中。哦,我明白了。我真傻。谢谢你的链接@joeBalin没问题,祝你在这个项目上好运。