B3S
menu close

MySQL

【SQL】3つの列から2番めに長い列を抽出


ヤス

更新日:2021/08/11


どうも、ヤスです。

ある日、上司からこのような指令が飛びました。

「商品リストから、商品サイズの縦、横、高さの内、2番めに長い辺がXXXcm以上のリスト抽出してくれ!(なるはやで)」

こんなんええやん

SQLにはGREATEST関数、LEAST関数があるので、それを駆使して、取ってみます。

https://dev.mysql.com/doc/refman/5.6/ja/comparison-operators.html#function_greatest


https://dev.mysql.com/doc/refman/5.6/ja/comparison-operators.html#function_least

SELECT
   id
 , h /* 高さ */
 , w /* 横 */
 , l /* 縦 */
FROM
   hogehoge
WHERE
  
  IF(h = LEAST(h, w, l) /*  高さが一番短い時 */
      , LEAST(w, l) /*  横、縦で短い方を返す */

      , IF(pm.height = GREATEST(h, w, l) /*  高さが一番長い時 */
          , GREATEST(w, l) /*  横、縦で長い方を返す */
          , h /* 高さが一番長くもなく、一番短くもない場合 */
      )
  ) >= xxx

どこかの知恵袋をまるまる参考にしてますw

ロジックを見れば、あぁ、なるほどと思いますが、こういう頭の体操は大事ですね。

頑張ってSQL勉強せねば。