KB)SQLを使う業務では分析関数を使いこなすと、生産性とSQLの可読性とパフォーマンスを、大きく向上させることができます。分析関数を使う際の考え方と、処理のイメージを解説します。今回の応用編では、分析関数の変わった使い方を紹介します。nullsオプション最後に参考資料はじめに今回の応用編では、分析関数の変わった使い方を紹介します。対象読者SQLの可読性を向上させたい方SQLのパフォーマンスを向上させたい方2問目で3値倫理に関連する問題を、4問目でcase式に関連する問題を取り上げますので、3値論理とNULLとCASE式のススメ(前編)を先に読んでおくと理解が進むと思います。10.2.0.1.0で動作確認しました。V9.5でも動作確認しました。その他、次の環境でも応用が可能です。複数列のdistinctなcount最初は、複数列のdistinctなcountを求めるSQLです。テーブルのデータと、出力結果を考えます。bColA,ColBの組み合わせのdistinctなcountを求めます。(ab,c),(a,bc),(a,b)で3通りの組み合わせがあるので、これをdiscntとして下記の形で出力します。3下記は、残念ながら文法エラーとなります。count関数で2つ以上の引数の指定は認められていないのです。IDTable;どうにかして引数を1つにまとめようということで、文字データとしてのカンマが存在しないならば、カンマを区切り文字に使って文字を連結させた下記のSQLでもいいでしょう。ID;しかし、上記のSQLではColAとColBが数値型や日付型だった場合に、文字型にキャストしないと暗黙キャストが発生します。そこで、別解として下記の逆ソートを使うSQLがあります。count関数で2つ以上の引数の指定はできませんが、dense_rank関数であれば、2つ以上の引数を指定できるのです。ascでのascは省略可能ですが、descと対比させたほうが分かりやすいと考え、省略していません。下記の数式をふまえてdense_rank関数を使っています。-1を加算しているのは、自分を2回数えているからです。下記SQLの結果を考えると理解しやすいでしょう。OracleSQLパズルの運営者。AtCoderレーティングは1204(水色)。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。