SQLに不慣れで使いだしたばかりなので初歩的なものかと思いますが、よろしくお願いします。
前提・実現したいこと
下記のようなテーブル(AABB)があります。
AA | BB |
---|---|
a | 1 |
a | 2 |
a | 3 |
a | 1 |
a | 2 |
b | 1 |
b | 3 |
b | 2 |
b | 3 |
b | 4 |
これをSQLでどうにかして、
AA | BB | max |
---|---|---|
a | 1 | 2 |
a | 2 | 2 |
b | 3 | 2 |
というような結果を出したいです。
つまり、AAごとにBBが何個あるのかカウントし、一番多かったBBの値とその個数を、複数個ある場合は複数個返したいです。
試したこと
sql
1select AA, max(a.count) as max 2from ( 3 select AA, BB, count(BB)as count 4 from AABB 5 group by AA, BB 6) a 7group by a.AA order by AA;
上記のSQL文でMAXやCOUNTを使ってAAごとに何個ある、というものまでは出来たのですが、
GROUP BYで行っているため、AAごとに実行しようとすると複数個あった場合でも1つになってしまいます。
AA | max |
---|---|
a | 2 |
b | 3 |
また、BBの表示もできず…selectに入れてもBBごとにmaxが表示されるだけで、私でも違うと分かりました。
複数個ならWHERE句を使うというのも見かけましたが、どう使えばうまくいくのか分からず
エラーばかり出て迷走しております…
初歩的かと思いますが、教えてくださいませ。
よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー