- ベストアンサー
2番目に小さい引数を返す関数
mysql5で2番目(またはN番目)に小さい(または大きい)引数を返す関数はありますか 例えば、 func(2番目, 2, 15, 7) のようにして7を返してくれるような関数はありますか または真ん中の数を返してくれる関数はありますか func(2, 15, 7) で7が返る これはさすがにないか・・・
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
いくつかわからない引数を取るような関数はあまりSQL的ではないですね エクセルを意識していますか? 特定にフィールドに対してn番目のデータを取るというならSQLで処理できます。 ただしn番目というのは同順があるばあい繰り下げるのか、単純に順位付けしていいのか など仕様をかためないと思った通りの値を得ることができません。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>例えば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などでソートして表示することができます
お礼
こんばんは! うまい関数は見つかりませんでしたが、入れ子にした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) ) 煩雑な式ですが、ひとまず動きました・・・
お礼
こんばんは! 実際には次のようなことをやろうとしています 例えばSELECT文で取ってきたある1行が、 2, 15, 7 となっていた場合、これを小さい順に並べて 2, 7, 15 のようにしようとしています ・・・なかなかうまい関数が見つかりません(x_x)