2016-11-24 75 views
1

假設我有一個表影片(電影,類別)。 我想找出電影最多的類別。我如何做到這一點而不使用LIMIT?從子查詢中選擇具有最大值的行,不使用LIMIT

我想我可以做這樣的事情:

SELECT category 
FROM 
(SELECT category, COUNT(*) AS num 
FROM films 
GROUP BY category) AS T1 
WHERE num = 
(SELECT MAX(num) 
FROM 
(SELECT category, COUNT(*) AS num 
FROM films 
GROUP BY category) AS T2) 

但是否有這樣做的更優雅的方式?最好是我不必多次寫同一子查詢的地方?

謝謝!

(如果你想知道爲什麼我不能使用LIMIT,它是家庭作業)

回答

1

,你可以使用一個變量來創建行號做:

SELECT category 
FROM 
    (
     SELECT 
      category 
      COUNT(*) as NumOfFiles 
      ,(@rn:= @rn + 1) as RowNumber 
     FROM 
      Films f 
      CROSS JOIN (SELECT @rn:=0) vars 
     GROUP BY 
      category 
     ORDER BY 
      COUNT(*) DESC 
    ) t 
WHERE 
    t.RowNumber = 1 
相關問題