zukucode
主にWEB関連の情報を技術メモとして発信しています。

Oracle 複数列の中で値が最大(最小)の値を取得する方法

集計関数のMAXMINでは取得したの中の最大(最小)の値を取得しますが、取得した行ごとに複数の列の中で最大(最小)の値を取得する方法を紹介します。

例えば以下のテーブルがあるとします。(生徒ごとにテストの成績を格納しているとします。)

table1(成績)
idjapaneseenglishmath
1674361
2366682
3767751
4835686

このとき、生徒全体の国語(japanese)の最高点(MAX)や数学(math)の最低点(MIN)を取得するにはSQL GROUP BYで複数の行を集計して1行で取得するで紹介したように、GROUP BYを使って集計すればよいのですが、生徒ごとに最も良かった(悪かった)教科を取得するには、GREATESTまたはLEASTを使用します。

SELECT
  id,
  GREATEST(japanese, english, math) highest,
  LEAST(japanese, english, math) lowest
FROM table1
取得結果
idhighestlowest
16743
28236
37651
48656

GREATEST(列1, 列2, 列3 ...)のように指定すると、指定した列の値の中の最大値を取得します。

また、同じようにLEAST(列1, 列2, 列3 ...)と指定すると、指定した列の値の中の最小値を取得します。

nullの扱い

値の中に1つでもnullの値があると、結果は常にnullとなってしまいます。(GREATESTLEASTの両方とも)

nullが想定される列を扱う場合はNVLなどでnull以外の値に変換する必要があります。


関連記事

  • Oracle 前後の空白スペース(全角・半角両方)を削除する

    Oracleで前後の空白スペース(全角・半角両方)を削除する方法を紹介します。Oracleのスペースを削除するTRIM関数は、全角スペースは削除されません。RTRIM関数は右側のみ、LTRIM関数は左...


  • Oracle システム日付をYYYYMMDD形式などの文字列型に変換する

    Oracleでシステム日付を文字列で扱う方法をまとめます。Oracleでシステム日付を取得するには`SYSDATE`を使用します。SYSDATEは日付型で取得されます。YYYYMMDD形式などの文字列...


  • Oracle 日付を日本語の書式でフォーマットする

    Oracleでシステム日付などの日付型の値をYYYY年MM月DD日のように、日本語の書式の文字列に変換する方法を紹介します。YYYYMMDD形式などの文字列型に変換したい場合はTO_CHARでフォーマ...


  • Oracle システム日付や任意の日付型の月末や月初の日付を取得する

    Oracleで日付の月末や月初を取得する方法を紹介します。月初を取得したい場合は以下のように日付部分を01固定で年月のみ取得するようにすれば取得できます。月末を取得したい場合、月初のように日にちを固定...


  • Oracle 日付の加算・減算を行う

    Oracleで日付の加算・減算を行う方法を紹介します。日付型のカラムに対しては、数字の計算と同じ要領で行うことができます。YYYYMMDD形式などの文字列型のカラムの場合は、日付型に変換してから上記と...


  • Oracle Data Pump Exportの手順と注意点

    OracleでData Pump Exportを行う手順を紹介します。まずはwindowsなどのエクスプローラでエクスポート先のディレクトリを作成します。本ページの例では、D:DUMPFILEにエクス...


  • Oracle Data Pump Exportでエラーになるときの対処法

    OracleのData Pump Exportで以下のエラーが発生しました。調べたところ、権限の問題のようでしたので、ディレクトリの読込・書込権限を付与しましたが、改善しませんでした。しかも以前は問題...


  • Oracle 急に接続ができなくなった場合の対処法

    Oracleに急に接続ができなくなったことがあり、復旧したときの手順を作業メモとして残します。接続しようとすると、エラーメッセージなどが表示されるわけではなく、ずっと接続中(応答なし)の状態になります...


  • Oracle Clientをアンインストールする(windows7,10)

    Oracle Clientをアンインストールする方法を紹介します。Oracle Clientのバージョンは12.1.0、確認したOSはwindows7とwindows10です。deinstall.ba...


  • SQL WITH句で同じSQLを1つのSQLに共通化する

    同じようなSQLはWITH句を使用して共通化すればパフォーマンスが改善されることが多いです。WITH句を使用すれば1つの副問い合わせをいろいろな場所で使いまわすことができます。メインのSQLの前にVI...