- - PR -
DB2で集計結果をTOP指定する方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-03-20 14:25
いつも拝見させていただいております。
DB2初心者です。 使用しているDBはDB2です。 以下のテーブル(TBL_MONEY)から TBL_MONEY KEY1 | KEY2 | KEY3 | MONEY A | A1 | a1 | 10 A | A1 | a2 | 20 A | A1 | a3 | 30 A | A2 | a1 | 120 B | B1 | b1 | 50 B | B1 | b2 | 60 B | B1 | b3 | 70 B | B2 | b1 | 10 B | B2 | b2 | 30 B | B3 | b1 | 70 SQLを実行して (SQL) SELECT KEY1, KEY2 ,SUM(MONEY) MONEY FROM TBL_MONEY GROUP BY KEY1, KEY2 (結果) KEY1 | KEY2 | MONEY A | A1 | 60 A | A2 | 120 B | B1 | 180 B | B2 | 40 B | B3 | 70 が求まるのですが、MONEYの降順で上位2つを取るというSQLはどのように 書けばいいのでしょか? (欲しい結果) KEY1 | KEY2 | MONEY A | A2 | 120 A | A1 | 60 B | B1 | 180 B | B3 | 70 ご教授よろしくお願いします。 | ||||
|
投稿日時: 2006-03-20 16:05
SQLの途中から書きますが、
| ||||
|
投稿日時: 2006-03-20 16:41
かつのり様 御返事ありがとうございます。
>order by money desc fetch first 2 rows only 教えていただいたSQLですと、 (結果) KEY1 | KEY2 | MONEY B | B1 | 180 A | A2 | 120 となってしまいます。 KEY1に対してTOP2という指定はできないのでしょうか? | ||||
|
投稿日時: 2006-03-20 17:26
そう意味でしたか・・・失礼しました。
TOP句のような一発指定の方法は、私は知らないですね。 主キーだけで優劣を決めれるのであれば、 サブクエリを駆使すれば上位2件のみの取得も可能ですが、 主キーではないカラムの値では無理でしょう。 SQLで無理をするより、取得する側で工夫する方が早いと思います。 | ||||
|
投稿日時: 2006-03-20 17:54
かつのり様 御返答ありがとうございました。
今回の件は、ご指摘の様にSQLでは無理をせずにアプリ側で工夫しようと思います。 もしご存知の方がいらっしゃいましたら、今後参考にさせて頂きたいと思いますので、 レスの方、よろしくお願い致します。 どうもありがとうございました。 | ||||
|
投稿日時: 2006-03-20 21:24
こんなので出来ませんか?
[ メッセージ編集済み 編集者: とんくま 編集日時 2006-03-20 21:37 ] | ||||
|
投稿日時: 2006-03-20 22:36
こちらの方が、多少簡単で良いでしょう。
| ||||
|
投稿日時: 2006-03-21 02:30
なるほど。そんな方法があったのですね。
勉強になりました。 (OLAP系は各ベンダー毎に全く違うので、覚えるのが大変ですね。。。) |