2014-10-31 40 views
0

我是新来的SQL查询和执行查询:SQL查询来发现在所有最大的价值在同一个表

我在网上查阅了一些例子,但没有成功得多。

下面是该查询

SELECT m.genre, m.movie_title, m.release_year, m.movie_length 
FROM MOVIE m GROUP BY m.genre, m.movie_title, m.release_year,m.movie_length 
ORDER BY m.movie_length asc; 

如果别人在我怎样才能得到的数值解释,将高度赞赏帮助。

谢谢

+0

您的问题已经得到解答,但下次请只选择一个RDBMS标签,而不是两个('mysql'和'oracle11g')。这些是具有不同SQL语法的不同RDBMS引擎。如果你需要解决这两个问题,那么就需要澄清你的问题。 – nop77svk 2014-10-31 09:17:45

回答

1

要获得给定流派的所有电影的最大长度,可以使用MAX()聚合函数。你所要做的就是按照流派进行分组。这有点棘手,因为您不能跳入并选择电影标题,否则将无法正确分组。通过获取体裁和最大短片长度为它开始:

SELECT m.genre, MAX(m.movie_length) AS longestMovie 
FROM movie m 
GROUP BY m.genre; 

一旦你做到了这一点,你可以用你的表连接,并得到最大的电影:

SELECT m.genre, m.movie_title, m.release_year, m.movie_length 
FROM movie m 
JOIN (SELECT m.genre, MAX(m.movie_length) AS longestMovie 
     FROM movie m 
     GROUP BY m.genre) t 
ON t.genre = m.genre AND t.longestMovie = m.movie_length; 

这里是一个工作SQL Fiddle

+0

这确实有帮助,但它不会选择电影长度最大的所有流派。任何想法如何我可以实现这一目标? – Maddy 2014-10-31 06:23:49

+0

@Mani我最初误解了你的问题,请看编辑。 – AdamMc331 2014-10-31 06:26:07

+0

谢谢你,这让我非常感兴趣。我不知道我们可以在同一张桌子上进行连接。谢谢 – Maddy 2014-10-31 06:29:35

2
SELECT m.genre, m.movie_title, m.release_year, m.movie_length 
FROM MOVIE as m order by m.movie_length desc limit 0,1; 

通过DESC添加顺序把限制只得到1记录后。 0表示从0开始,1开始定义记录数。

+0

我不知道这将如何实现在每个流派之间获得最高的电影长度。我试图执行查询,但它不执行。如果你能解释一点。 – Maddy 2014-10-31 06:08:23

+0

对不起,我忘记为orderby添加列。请再次尝试更新后的查询。 – 2014-10-31 06:09:51

+0

FROM MOVIE m。他错过了以及ORDER BY 。 – FortMauris 2014-10-31 06:10:03

0
SELECT m.genre, m.movie_title, m.release_year, m.movie_length 
FROM MOVIE AS m ORDER BY m.movie_length DESC LIMIT 1; 

这应该是你在找什么。

+0

谢谢你的答案,但查询仍然没有执行,也没有得到“AS”后的声明。 – Maddy 2014-10-31 06:14:24

+0

什么是错误?请按CTRL + C。仅仅意味着,不要输入像MOVIE.genre这样的内容,而是给它另一个昵称call m,以便您可以执行类似m.genre的操作。它通常用于缩短陈述并尽量减少错字的几率。 – FortMauris 2014-10-31 06:16:11

+0

我只想跳进来说这里的AS是可选的。 @Mani,当你在问题中的查询中说'FROM movie m'时,它和你做的事情是一样的。 – AdamMc331 2014-10-31 06:20:01

相关问题