生産性と、SQLの可読性とパフォーマンスを、大きく向上させることができます。by句でrangeを使った分析関数などを取り上げます。最後に参考資料はじめに「分析関数の衝撃(中編)」に引き続き、CodeZineのミック氏の記事で記載されたSQLを、分析関数を使って記述していきます。by句でのrangeの使用例も解説します。対象読者SQLの可読性を向上させたい方SQLのパフォーマンスを向上させたい方この記事では、「SQLで数列を扱う」と「相関サブクエリで行と行を比較する」に記載されているSQLを、分析関数を使って記述していきますので、先に読んでおくと理解しやすいと思います。10.2.0.1.0で動作確認しました。V9.1でも動作確認しました。2005でも応用できます。その1:行の折り返しを考慮しないまずは人数分の空席を探すSQL(行の折り返しを考慮しない)についてです。「SQLで数列を扱う」では、以下のSQLが提示されています。);これを分析関数で書き換えてみます。テーブルのデータと、出力結果を考えます。配列の添字の最小値からループ配列の添字を元に、3つの連続した空席を探すといった処理を行うと思いますが、分析関数を使ったSQLでも似たような考え方を使います。3;インラインビューの中のselect文にstatus列を追加した、SQLのイメージはこうなります。SQLのイメージLead関数では、2行後の「seat」をSeatEndとして求めてます。count関数では、引数にnullif((status,'占'))を指定しています。集合関数のcount関数と同様に、分析関数のcount関数も、nullを数えません。このことと、「status」は占または空であることを使って、nullif関数で「status」が占ならnullを返すようにして、「status」が空の行を数えるようにしてます。count関数とnullif関数の組み合わせは、「HAVING句の力」の、nullを含まない集合を探す、と同じような考え方と言えるでしょう。count関数のwindowing_clauseは、下記のように解釈すると分かりやすいと思います。--大きいほうは、2行後まで後は、count関数の結果であるSeatCountが3であることを、外側のselect文のwhere句で条件としてます。DB2では、下記のSQLとなります。OracleSQLパズルの運営者。AtCoderレーティングは1204(水色)。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。