プロが教えるわが家の防犯対策術!

MySQLについて質問です。

以下のような2つのテーブルがあったとして、
2015年に一番勝利したボクサーを表示したい場合、
どのようにしたらよいでしょうか。
(以下詳細)
※Aテーブルのwinner_idとBテーブルのid、
nameは連動しており、winner_idが2と表示
されていれば、那須川天心が勝利したという
意味です。
つまり、2015年にwinner_idが最も重複した
ものをを表示したいです。

Aテーブル:

No winner_id date
1 2 2014-01-05
2 5 2014-03-07
3 4 2014-06-08
4 3 2014-09-09
5 1 2015-03-09
6 5 2015-12-08
7 1 2015-07-04
8 5 2015-02-07
9 2 2015-04-02
10 3 2015-09-01



Bテーブル:

Id name
1 フロイドメイウェザー
2 那須川天心
3 武尊
4 朝倉未来
5 チンパンジー

この場合、count文を使用すると思うのですが
2015年だけを指定して、Bテーブルの結果も
参照して一文で表示したいです。
どうしたらよいでしょうか。

※もう一度いいます。
一文で表示したいです。

ご教授よろしくお願いします。

A 回答 (1件)

ウィンドウ関数を使い、集計数の最大を求めましょう


https://dev.mysql.com/doc/refman/8.0/ja/window-f …

-- 集計した件数から年次毎の最大数を求める
select 年次, 勝者
, count(*) as 勝利数
, max(count(*)) over (partition by 年次) as 年間最大勝利数
from 試合
group by 年次, 勝者

上記をサブクエリにして、他テーブルとの結合や条件絞り込みを付け足せば、問い合わせを一文で組み立てられると思います。

select ...
from (分析サブクエリ)
inner join ...
where 勝利数 = 年間最大勝利数 and 年次 = ...
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!