- PR -

フィールド毎の、Top1を知りたい

投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-09-01 09:36
これでどうでっか?
FieldBにインデックス作れば性能もそこそこでしょう。
コード:
SELECT outer.FieldA,
       outer.FieldB,
       count(*)
FROM   TestA outer
WHERE  outer.FieldA = (SELECT min(inner.FieldA)
                       FROM   TestA inner
                       WHERE  inner.FieldB = outer.FieldB)
GROUP BY outer.FieldA,
         outer.FieldB;

うきょきょ
常連さん
会議室デビュー日: 2004/01/09
投稿数: 44
投稿日時: 2004-09-01 14:59
なんか思わぬ方向に進んでるのもありますが^^;

カーニーさんのSQLで期待している結果が返ってきました。
皆さんありがとうございました。

Top句ではなく、minを使うのがポイントだったのですね。
またまたテストに使ったのを後学のために書いておきます。
#必要なければ削除訂正します。
--------------------------------------------------------------------
/**
** --Drop Table
** Drop Table TestA
**
** go
**
** --Create Table
** Create Table TestA
** (
** FieldA int not Null,
** FieldB Char(1) not Null,
** FieldC Char(2) not Null,
** Primary Key (FieldA, FieldB, FieldC)
** )
**
** go
**
** --Test Data Insert
** insert into TestA(FieldA, FieldB, FieldC) Values ('1', 'A', 'AA')
** insert into TestA(FieldA, FieldB, FieldC) Values ('1', 'A', 'BB')
** insert into TestA(FieldA, FieldB, FieldC) Values ('2', 'A', 'CC')
** insert into TestA(FieldA, FieldB, FieldC) Values ('2', 'B', 'BB')
** insert into TestA(FieldA, FieldB, FieldC) Values ('2', 'B', 'CC')
** insert into TestA(FieldA, FieldB, FieldC) Values ('3', 'B', 'DD')
** insert into TestA(FieldA, FieldB, FieldC) Values ('5', 'C', 'EE')
** insert into TestA(FieldA, FieldB, FieldC) Values ('8', 'C', 'FF')
**
** go
**/

--Select
SELECT A.FieldA,
A.FieldB,
count(*)
FROM TestA A
WHERE A.FieldA = (SELECT min(B.FieldA)
FROM TestA B
WHERE B.FieldB = A.FieldB)
GROUP BY A.FieldA,
A.FieldB;

スキルアップ/キャリアアップ(JOB@IT)