2016-11-24 57 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