2016-11-24 16 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 
関連する問題