Mysql 返回一个类型的大多数电影的公司
我在我的大学里从事这个项目,在那里我需要创建一个数据库查询。我希望查询返回给定类型中大多数电影的公司。目前我有这个查询,但它只返回一个公司,但可能有多个Mysql 返回一个类型的大多数电影的公司,mysql,sql,sql-order-by,inner-join,window-functions,Mysql,Sql,Sql Order By,Inner Join,Window Functions,我在我的大学里从事这个项目,在那里我需要创建一个数据库查询。我希望查询返回给定类型中大多数电影的公司。目前我有这个查询,但它只返回一个公司,但可能有多个 SELECT CompanyID, CategoryID, COUNT(*) as NumberOfMovies FROM Movie NATURAL JOIN CategoryFilm NATURAL JOIN Category NATUAL JOIN Comapny GROUP BY CategoryID,
SELECT CompanyID, CategoryID, COUNT(*) as NumberOfMovies
FROM Movie
NATURAL JOIN CategoryFilm
NATURAL JOIN Category
NATUAL JOIN Comapny
GROUP BY CategoryID, CompanyID
Order by NumberOfMovies DESC LIMIT 1
我想我需要一个“have”在这里。请尝试一下,这可能是因为您添加了
限制1
,它只显示第一条检索到的记录
SELECT CompanyID, CategoryID, COUNT(*) as NumberOfMovies
FROM Movie
NATURAL JOIN CategoryFilm
NATURAL JOIN Category
NATURAL JOIN Comapny
GROUP BY CategoryID, CompanyID
Order by NumberOfMovies DESC
请尝试此操作,可能是因为您添加了
限制1
,它只显示第一条检索到的记录
SELECT CompanyID, CategoryID, COUNT(*) as NumberOfMovies
FROM Movie
NATURAL JOIN CategoryFilm
NATURAL JOIN Category
NATURAL JOIN Comapny
GROUP BY CategoryID, CompanyID
Order by NumberOfMovies DESC
我假设“类别”是指“类型”——或者它们是同一个东西
不要使用自然连接
。它甚至不使用正确声明的外键关系,而仅仅依赖于表之间的名称相似性。这是危险的,因为使用的列没有指定,并且可能会引入难以调试的错误。我经常把它称为“讨厌”,因为它不考虑表声明
如果您有一个给定的类别,那么我希望有一个WHERE
子句:
SELECT CompanyID, COUNT(*) as NumberOfMovies
FROM Movie m JOIN
CategoryFilm cf
ON cf.movie_id = m.movie_id JOIN
Company c
ON c.company_id = m.company_id
WHERE cf.category_id = ?
GROUP BY CategoryID
ORDER BY NumberOfMovies DESC
LIMIT 1;
我假设“类别”是指“类型”——或者它们是同一个东西
不要使用自然连接
。它甚至不使用正确声明的外键关系,而仅仅依赖于表之间的名称相似性。这是危险的,因为使用的列没有指定,并且可能会引入难以调试的错误。我经常把它称为“讨厌”,因为它不考虑表声明
如果您有一个给定的类别,那么我希望有一个WHERE
子句:
SELECT CompanyID, COUNT(*) as NumberOfMovies
FROM Movie m JOIN
CategoryFilm cf
ON cf.movie_id = m.movie_id JOIN
Company c
ON c.company_id = m.company_id
WHERE cf.category_id = ?
GROUP BY CategoryID
ORDER BY NumberOfMovies DESC
LIMIT 1;
如果要允许绑定,可以使用窗口函数
rank()
:
这将为您提供每个类别的顶级公司,包括领带。如果要对给定类别进行筛选,只需在内部查询中添加一个where
子句即可
旁注:不要使用
natural join
s:它们容易出错。我重新编写了查询,改为使用内部联接
s(我对关系做了一些假设)。如果要允许连接,可以使用窗口函数rank()
:
这将为您提供每个类别的顶级公司,包括领带。如果要对给定类别进行筛选,只需在内部查询中添加一个where
子句即可
旁注:不要使用
natural join
s:它们容易出错。我重写了查询,改为使用内部联接
s(我对关系做了一些假设)。因此您有一些数据,当您对该数据运行此select语句时,您返回了一行,并且希望返回多行?你认为我们应该有一部分数据,这样我们才能帮助你吗?请用这些数据添加您的预期结果,并与我们共享您使用的数据库?@Jonas,请检查它是否有助于您获得一些数据,当您对这些数据运行此select语句时,您会返回一行,并且您预期会有多行?你认为我们应该有一部分数据,这样我们才能帮助你吗?请用这些数据添加您的预期结果,并与我们分享您使用的数据库?@Jonas,请检查是否有用