こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL GROUPで件数の一番多いレコードのみ取る

SQL GROUPで件数の一番多いレコードのみ取る

ORACLE10です。
次のようなテーブルがあります。

USER -----------テーブル名
ID,NAME,DATA----列名
1,A,any
1,A,any
1,B,any
2,C,any
3,D,any

このテーブルから、IDをGROUPにして、さらに、一番使用頻度の多いNAMEを取得したいのです。
表示したいのは、IDとNAMEです。
つまり、取得結果例は次のようになります。

取得結果例
ID,NAME----列名
1,A
2,C
3,D

SQL文をどのように作れば可能でしょうか?

ちなみに、IDやNAMEのマスタテーブルはありません。
自分では、「(select ID, NAME, count(*) from USER group by ID, NAME) COUNT」で、COUNTを内部テーブルにして、グループ内で一番多いcount(*)をmaxで取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

投稿日時 - 2010-05-11 22:10:55

QNo.5888596

困ってます

質問者が選んだベストアンサー

SELECT A.ID,A.NAME FROM
(SELECT ID,NAME,COUNT(*) KAZU FROM USER
GROUP BY ID,NAME) A
LEFT OUTER JOIN
(SELECT ID,NAME,COUNT(*) KAZU FROM USER
GROUP BY ID,NAME) B
ON A.ID=B.ID AND A.KAZU<B.KAZU
GROUP BY A.ID,A.NAME
HAVING COUNT(B.ID)=0

こんな感じかな?

ID、NAMEと件数からなるクエリを二つ作り、それぞれを結合
させます。本命のAから見て、同じIDを持ち、自分より件数の
大きいB側のレコード数を調べます。これが0であるもの、即ち、
「自分の件数より大きい件数のデータが無い」が抽出条件です。
尚、最大件数と同数のデータは全て抽出されます。

投稿日時 - 2010-05-12 15:29:49

お礼

ありがとうございますー☆
求めていたものですミ^×^ミ

投稿日時 - 2010-05-13 23:36:25

ANo.1

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問