- - PR -
組合せの最大値を取得する方法
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-08-23 13:21
以下のようなテーブルからA,Bの組合せで最大値を取得するスマートな方法はありませんでしょうか?連結した上でmaxするのは出来れば避けたいと思っています。
よろしくお願いします。 A B C ------- 1 1 A 1 3 B 3 1 C 3 2 D ←これを取得したい [ メッセージ編集済み 編集者: TAKEZO 編集日時 2006-08-23 13:22 ] | ||||
|
投稿日時: 2006-08-23 13:29
質問に質問で返してしまい恐縮ですが
A B C ------- 1 1 A 1 3 B 3 1 C 3 2 D 2 3 E とある場合、 DとEどちらが最大になるのでしょうか。 また、 A B C ------- 1 1 A 1 3 B 3 1 C 3 2 D 3 2 F とある場合、取得するものはDまたはFなのか、DとFの両方なのか それによっても考え方が変わってくると思います。 A,Bの組合せで最大である、 というのをどう定義しているのか、 そこが重要です。 A B C ------- 2 6 A 3 4 B 4 3 C 6 2 D なんてテーブルの場合 どれが最大なんでしょうね。 | ||||
|
投稿日時: 2006-08-23 13:35
すみません、条件が漏れておりました。フィールドAの値を優先したいと思っています。
また、この条件で2件のレコードが該当した場合ですが、それはそれで構わないです。 つまり、例に挙げていただいた内容の場合、DとFのレコードが取得できればOKです。 A B C ------- 1 1 A 1 3 B 3 1 C 3 2 D 3 2 F また、下記の場合はDのレコードを取得したいと考えています。 A B C ------- 2 6 A 3 4 B 4 3 C 6 2 D [ メッセージ編集済み 編集者: TAKEZO 編集日時 2006-08-23 13:38 ] | ||||
|
投稿日時: 2006-08-23 13:44
連結するしかないと思います。
嫌な感じのSQL文になりますが・・・。 | ||||
|
投稿日時: 2006-08-23 14:01
order by で (A+B) ,A 両方の降順に並び替えれば
一番上のレコードが最大値になりませんでしょうか? | ||||
|
投稿日時: 2006-08-23 14:12
あすかさん
とりあえず、連結以外でこんな方法でも出来そうですが、こちらもスマートとは 程遠いようです。。。そういう意味では連結のほうがスマートかも知れません。 今回は幸いAもBも桁数が決まっているのでこの方法を採用しようと思いますが桁数 に左右されるのは少し嫌な感じがしますね。。。 select * from (select * from TABLE where A = (select MAX(A) from TABLE)) where B = (select MAX(B) from (select * from TABLE where A = (select MAX(A) from TABLE))) eterniaさん 確かにその方法で並びそうですね。ただ、今回は直感的に分かりやすい連結で 実装してしまおうと思います。ありがとうございました。 簡単そうで意外と難しいですね。。。 | ||||
|
投稿日時: 2006-08-23 14:14
私もそれを考えたのですが 検索結果が複数行になることを想定すると 取得結果を再編集しないといけないのは どうかな、と思いました。 | ||||
|
投稿日時: 2006-08-23 16:56
DBの種類がはっきりすれば問題ないのでは? 例えば、Oracleならrownum擬似列、PostgreSQLならlimitで制限できますよ。 | ||||
