2014-10-31 77 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

相關問題