• ベストアンサー

2番目に小さい引数を返す関数

mysql5で2番目(またはN番目)に小さい(または大きい)引数を返す関数はありますか 例えば、 func(2番目, 2, 15, 7) のようにして7を返してくれるような関数はありますか または真ん中の数を返してくれる関数はありますか func(2, 15, 7) で7が返る これはさすがにないか・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いくつかわからない引数を取るような関数はあまりSQL的ではないですね エクセルを意識していますか? 特定にフィールドに対してn番目のデータを取るというならSQLで処理できます。 ただしn番目というのは同順があるばあい繰り下げるのか、単純に順位付けしていいのか など仕様をかためないと思った通りの値を得ることができません。

zyousuke
質問者

お礼

こんばんは! 実際には次のようなことをやろうとしています 例えばSELECT文で取ってきたある1行が、 2, 15, 7 となっていた場合、これを小さい順に並べて 2, 7, 15 のようにしようとしています ・・・なかなかうまい関数が見つかりません(x_x)

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>例えば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などでソートして表示することができます

zyousuke
質問者

お礼

こんばんは! うまい関数は見つかりませんでしたが、入れ子にした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) ) 煩雑な式ですが、ひとまず動きました・・・

関連するQ&A