从子查询中选择具有最大值的行,不使用LIMIT
问题描述:
假设我有一个表影片(电影,类别)。 我想找出电影最多的类别。我如何做到这一点而不使用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,它是家庭作业)
答
,你可以使用一个变量来创建行号做:
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