1. ホーム
  2. sql

[解決済み] SQLでmax(count(*))を行うことは可能ですか?

2022-03-09 07:58:12

質問

以下は私のコードです。

select yr,count(*)
from movie
join casting on casting.movieid=movie.id
join actor on casting.actorid = actor.id
where actor.name = 'John Travolta'
group by yr;

ここで質問です。

ジョン・トラボルタ」にとって最も忙しかった年はどれか。各年度の映画製作本数を示せ。

これがテーブルの構造です。

movie(id, title, yr, score, votes, director)
actor(id, name)
casting(movieid, actorid, ord)

これは私が得ている出力です。

yr      count(*)
1976    1
1977    1
1978    1
1981    1
1994    1
-- etc.

のある行を取得する必要があります。 count(*) が最大です。 どうすればいいのでしょうか?

解決方法は?

使用する。

  SELECT m.yr, 
         COUNT(*) AS num_movies
    FROM MOVIE m
    JOIN CASTING c ON c.movieid = m.id
    JOIN ACTOR a ON a.id = c.actorid
                AND a.name = 'John Travolta'
GROUP BY m.yr
ORDER BY num_movies DESC, m.yr DESC

注文方法 num_movies DESC は、最も高い値を結果セットの先頭に配置します。 もし、多数の年が同じカウントであった場合 m.yr は最新の年を先頭に配置します。 num_movies の値が変更されます。

MAX(COUNT(*))を使うことはできますか?


いいえ、同じSELECT句の中で、集約関数を重ねることはできません。 内部の集約はサブクエリで実行する必要があります。 IE

SELECT MAX(y.num)
  FROM (SELECT COUNT(*) AS num
          FROM TABLE x) y