2016-11-24 2 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 
Смежные вопросы