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

mysql5で2番目(またはN番目)に小さい(または大きい)引数を返す関数はありますか

例えば、
func(2番目, 2, 15, 7)
のようにして7を返してくれるような関数はありますか

または真ん中の数を返してくれる関数はありますか
func(2, 15, 7)
で7が返る
これはさすがにないか・・・

A 回答 (2件)

いくつかわからない引数を取るような関数はあまりSQL的ではないですね


エクセルを意識していますか?

特定にフィールドに対してn番目のデータを取るというならSQLで処理できます。
ただしn番目というのは同順があるばあい繰り下げるのか、単純に順位付けしていいのか
など仕様をかためないと思った通りの値を得ることができません。
    • good
    • 0
この回答へのお礼

こんばんは!

実際には次のようなことをやろうとしています

例えばSELECT文で取ってきたある1行が、
2, 15, 7
となっていた場合、これを小さい順に並べて
2, 7, 15
のようにしようとしています

・・・なかなかうまい関数が見つかりません(x_x)

お礼日時:2011/03/01 23:26

>例えばSELECT文で取ってきたある1行が、


>2, 15, 7
>となっていた場合、これを小さい順に並べて

うーん、一レコードに別フィールドで2,15,7のようなデータの持ち方は
SQLではあまりおこないません。
すこし正規化について学習するとよいかもしれません。
こんかいの令だとたとえばID=xxxにたいして
ID NUM
xxx | 2
xxx | 15
xxx | 7
yyy | 10
yyy | 12
・・・

みたいなデータの持ち方をすれば、GROUP_CONCATなどでソートして表示することができます
    • good
    • 0
この回答へのお礼

こんばんは!

うまい関数は見つかりませんでしたが、入れ子にしたIF()でLEAST()とGREATEST()を使って2番目に小さい値を取ることができました。
私のケースの場合、列は3個と決まっているので、これを逆手に取って、2重のIF()で実現できました。

IF(
col1 = LEAST(col1, col2, col3),
LEAST(col2, col3),
IF(col1 = GREATEST(col1, col2, col3), GREATEST(col2, col3), col1)
)

煩雑な式ですが、ひとまず動きました・・・

お礼日時:2011/03/02 02:16

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

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