dポイントプレゼントキャンペーン実施中!

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で取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

A 回答 (1件)

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であるもの、即ち、
「自分の件数より大きい件数のデータが無い」が抽出条件です。
尚、最大件数と同数のデータは全て抽出されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/13 23:36

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す