OracleSQLパズル

サイト設立 2005年8月 9日
 最終更新日 2020年3月18日


Joe Celko氏の著書[SQLパズル]の内容をふまえて構造化定理を意識しつつ、SQLパズルを解くサイトです。
Oracle9i以降が対象です。


Twitter


勉強会の資料

分析関数とmodel句
Oracleの分析関数のサンプル集
PostgreSQL8.4新機能 window関数
DB2の分析関数の使用例
SQLServerの分析関数の使用例
SQL徹底指南書の前半問題をDB2で解く
SQL徹底指南書の後半問題を解く(作成中)
PostgreSQLの再帰SQLの使用例
PostgreSQLでSQLパズルの問題を解く


CodeZineの執筆記事(シーズン2)

CodeZineのMySQLの記事(シーズン2)の元原稿

MySQL8.0のWindow関数のサンプル集
MySQL8.0の再帰With句のサンプル集
MySQL8.0でSQLパズルの問題を解く


OTNの執筆記事

図でイメージするOracleのSQL全集


CodeZineの執筆記事(シーズン1)

OracleのSQLのアンチパターンの問題集1
OracleのSQLのアンチパターンの問題集2
PostgreSQLの再帰SQL1
PostgreSQLの分析関数の衝撃1 (モードとメジアン)
PostgreSQLの分析関数の衝撃2 (Lag関数と累計と移動累計)
PostgreSQLの分析関数の衝撃3 (数列を扱うSQLとrange指定)
PostgreSQLの分析関数の衝撃4 (集合の一致と全称肯定命題)
PostgreSQLの分析関数の衝撃5 (Row_Number関数の応用例)
PostgreSQLの分析関数の衝撃6 (window関数の応用例)
PostgreSQLの分析関数の衝撃7 (window関数の変わった使用例)
PostgreSQLの分析関数の衝撃8 (RowsとRangeの代用)
Oracle11gR1新機能PivotとUnPivot
Oracle10g新機能Partitioned Outer Join
Oracleのmodel句1 (model句の入門事項)
Oracleのmodel句2 (行の補完)
Oracleの階層問い合わせ1 (start with句,connect by句)
Oracleの階層問い合わせ2 (Level,sys_connect_by_path)
Oracleの階層問い合わせ3 (connect_by_IsLeaf,connect_by_root)
Oracleの階層問い合わせ4 (connect by nocycle)
Oracleの階層問い合わせ5 (ListAgg関数を模倣)
Oracleの階層問い合わせ6 (枝切りの入門事項)
Oracleの階層問い合わせ7 (複雑な枝切り)
分析関数の衝撃1 (前編)
分析関数の衝撃2 (中編)
分析関数の衝撃3 (後編)
分析関数の衝撃4 (完結編)
分析関数の衝撃5 (総集編)
分析関数の衝撃6 (応用編)
MySQLで分析関数を模倣1 (前編)
MySQLで分析関数を模倣2 (中編)
MySQLで分析関数を模倣3 (後編)
MySQLで分析関数を模倣4 (完結編)
MySQLで分析関数を模倣5 (応用編)
MySQLでOracleのSQLを模倣1 (集合演算編)
正規表現の入門1 基礎的なメタ文字
正規表現の入門2 難しいメタ文字
正規表現の問題集1 (基本編)
正規表現の問題集2 (応用編)


1 基礎編

1-1 キルヒホッフの実証論
1-2 ブール代数
1-3 集合理論
1-4 構造化定理
1-5 3値論理
1-6 select文の評価順序
1-7 ブール代数と集合演算の公式


2 基本編

2-1 順次機能

2-1-1 マルチテーブルインサート
2-1-2 連続したスカラー問い合わせ
2-1-3 select文の結果を使ってupdate
2-1-4 連続したnullチェック
2-1-5 集合演算でのnullの扱い
2-1-6 同一定義の他テーブルと比較
2-1-7 要素数が1の集合同士の比較
2-1-8 最も近い倍数に、数値を変換
2-1-9 数値を2進数、16進数に変換
2-1-10 文字列中の指定文字列の数
2-1-11 文字列の末尾から文字を取得
2-1-12 指定文字列の前後の文字列
2-1-13 文字列の指定文字を消去
2-1-14 文字列の指定文字以外を消去
2-1-15 連続した等しいかのチェック
2-1-16 式のリストの比較その1
2-1-17 式のリストの比較その2
2-1-18 nulls Firstとnulls Last

2-2 選択機能

2-2-1 SQLでの条件分岐
2-2-2 select句でサブクエリ
2-2-3 in述語の引数にサブクエリ
2-2-4 インラインビューを使用してmerge
2-2-5 条件付きinsert(1レコードのみ)
2-2-6 条件付きinsert(複数レコード)
2-2-7 case式とexists述語
2-2-8 exists述語の引数に集合演算
2-2-9 case式とLike演算子
2-2-10 共通集合と論理積
2-2-11 case式とLNNVL述語
2-2-12 merge(1レコードのみ)
2-2-13 any述語とall述語の使い道

2-3 繰り返し機能

2-3-1 自己結合と相関サブクエリ
2-3-2 前日のレコードを取得
2-3-3 集合関数のネスト
2-3-4 範囲の重複チェック
2-3-5 モード(最頻値)を取得
2-3-6 メジアン(中央値)を取得
2-3-7 任意の値に対する順位付け
2-3-8 過去の最高売上を取得
2-3-9 自然数の連番を持つ集合を作成
2-3-10 素数を求める
2-3-11 等差数列の和を求めるその1
2-3-12 等差数列の和を求めるその2
2-3-13 素因数分解
2-3-14 階乗を求めるその1
2-3-15 階乗を求めるその2
2-3-16 総積を求める
2-3-17 最小公倍数と最大公約数を求める
2-3-18 複数列の平均値を求める
2-3-19 月ごとの最終日の売上を集計
2-3-20 条件付き平均(重複なし)
2-3-21 条件付き平均(重複あり)
2-3-22 鳩の巣原理で重複を調べる
2-3-23 modを使った数列
2-3-24 逆ソート(リバースソート)
2-3-25 集合関数のdense_rank関数
2-3-26 正順位と逆順位
2-3-27 最小の空き番号を取得その1
2-3-28 最小の空き番号を取得その2
2-3-29 グループごとのモード(最頻値)を取得
2-3-30 グループごとのメジアン(中央値)を取得
2-3-31 標準SQLでメジアン(中央値)を取得
2-3-32 メジアン(中央値)を取得(分析関数版)
2-3-33 文字列の中央値(メジアン)のような値
2-3-34 日付の最小値-1から日付の最大値+1まで補完


3 応用編

3-1 select句で外部結合
3-2 別テーブル優先の抽出
3-3 nullでないデータの中で最小のデータを取得
3-4 順位にupdate
3-5 順位(DENSE)が指定した範囲のデータを取得
3-6 空き時間を探索してinsert
3-7 空き時間を探索してupdate
3-8 カレンダーを表示その1
3-9 カレンダーを表示その2
3-10 SCNと、コミット時刻を求める
3-11 指定期間内に誕生日を迎える人を取得
3-12 指定した年月時点での年齢を取得
3-13 IPとホスト名とログイン名を取得
3-14 Width_Bucket関数
3-15 case式と集合関数
3-16 case式とignore nullsその1
3-17 case式とignore nullsその2
3-18 文字列関数とignore nulls
3-19 同じ文字が二文字以上存在するかチェック
3-20 文字列の縦横変換
3-21 文字列のソート
3-22 相関サブクエリで順位付け
3-23 大小関係を出力
3-24 月曜日から出力
3-25 組み合わせの数を取得
3-26 文字クラスをtranslate関数で代用
3-27 full joinとunionの相互変換
3-28 前年との大小関係を求める
3-29 grouping setsで総合計を取得
3-30 初旬、中旬、下旬で集計
3-31 指定件数と打ち切りフラグを出力
3-32 Grouping_ID関数
3-33 銀行型丸め(Banker's Rounding)
3-34 Partitioned Outer Join
3-35 列数固定の集計
3-36 分析関数でのkeepの使用例
3-37 FizzBuzz問題
3-38 Outer Union (外和集合演算)
3-39 午前10時を基準としてグループ化
3-40 指定月を年度開始とした年度を求める
3-41 regr_count関数
3-42 rollUpで各値と小計と総合計も表示
3-43 更新可能なインラインビューでのwith句


4 @ITのSQLパズル

4-1 インラインビューで完全外部結合
4-2 インラインビューで集合作成
4-3 select句で1対1の結合
4-4 集合関数を使うスカラー問い合わせ
4-5 case式による他分岐
4-6 select文の結果のレコード件数を取得
4-7 文字を順番にセット
4-8 文字の検索
4-9 階層問い合わせの根を取得
4-10 合計が2位以内のデータを取得
4-11 総合計に対する比率を取得
4-12 階層の総積を取得
4-13 経路を取得
4-14 レコードを一意に特定する列の組み合わせ
4-15 加算の単位元をふまえたouter unionもどき
4-16 重複排除とソート
4-17 最大値の行の値を、他テーブルの最大値の行の値で更新
4-18 日本語の条件文にドモルガンの法則
4-19 リニアサーチで更新対象を求める
4-20 指定年の最初の日曜日を求める
4-21 updatableViewと複数列update
4-22 UpdatableViewをmergeで代用(3テーブル版)
4-23 model句でnullの行を詰める


5 2chのSQLパズル

5-1 nvl関数の引数に集合関数
5-2 他レコードに対する存在チェック
5-3 RowIDを使用した、同一レコードかのチェック
5-4 条件に応じた、他レコードの存在チェック
5-5 リストの中から最小のデータを求める
5-6 列数固定の行列変換
5-7 文字列のカウントを求める
5-8 update文で相関サブクエリ
5-9 他テーブルの値を使用してupdate
5-10 データのグループ分け
5-11 最大値のデータと外部結合
5-12 共通集合を求める
5-13 ソートして、最初のレコードと外部結合
5-14 order by句で相関サブクエリ
5-15 クロスジョインで求めた集合と外部結合
5-16 exists同士の論理積
5-17 nvl関数による分岐
5-18 期間内の特定の曜日の数を取得
5-19 order by句でdecode関数
5-20 階層のデータを出力
5-21 RowNumによる件数指定
5-22 ソートして、前後のデータを取得
5-23 インラインビューをグループ化
5-24 select句でスカラー問い合わせ
5-25 order by句で、case式による多分岐
5-26 group by句に演算式
5-27 和集合を作成してグループ化
5-28 update文で連番に更新
5-29 having句でスカラー問い合わせ
5-30 特定レコードの、前のデータを取得
5-31 相関サブクエリで件数取得
5-32 指定月と指定期間で集計
5-33 複数行複数列で最大のデータを取得
5-34 インラインビューでdistinct
5-35 同じ組み合わせのチェック
5-36 in述語の引数に分析関数
5-37 複数行を1列に変換
5-38 Last_Value関数
5-39 インラインビューでDense_Rank関数
5-40 グループごとに最大値の行を取得
5-41 重複値を持つ行を取得
5-42 Last関数
5-43 他テーブルとの共通集合
5-44 パーティションを切って分析関数
5-45 和集合を作成して総合計を取得
5-46 文字の出現回数を求める
5-47 他行を優先する出力その1
5-48 他行を優先する出力その2
5-49 他行を優先する出力その3
5-50 プライマリキーの交換
5-51 グループの値を交換
5-52 order by句で分析関数
5-53 前後の行も出力
5-54 order by句でcase式で分岐
5-55 RowIDでパーティション切り
5-56 nullを最も小さいとし、最小値の行を取得
5-57 前月が2位以内のデータを出力
5-58 外部結合して、大きいほうを出力
5-59 データ件数と、上位N件を出力
5-60 having句でrank within
5-61 その他を考慮した集計
5-62 連続数の最大値を求める
5-63 order by句で分析関数その2
5-64 not existsで存在否定命題の論理和
5-65 連続した期間の抽出(OverLapを考慮せず)


6 ブログのSQLパズル

6-1 二つのテーブルの列値の一致数を取得
6-2 期間別の集計
6-3 項目別のTOP3を取得
6-4 金額を超える組み合わせ
6-5 金額を超えない組み合わせ
6-6 金額を超える組み合わせ(テーブル版)
6-7 同上をnullに変換
6-8 アナログ時計を表示
6-9 レコード数上位2件/その他/全体を出力
6-10 unionでfull joinを代用
6-11 和集合と共通集合との差集合の要素数
6-12 ボウリングのスコア計算


7 フォーラムのSQLパズル

7-1 累計を取得
7-2 クロス集計
7-3 sum関数とdecode関数
7-4 decode関数でソートキーに変換
7-5 同一日付を期間に含むレコード数
7-6 分析関数の引数に演算結果
7-7 delete文で相関サブクエリ
7-8 プライマリキーの入れ替え
7-9 数値をカンマ区切りに編集
7-10 ランダムな列をupdate
7-11 指定した確率で行を取得
7-12 ランダムにソート
7-13 和集合を作成してmerge
7-14 古のSQL(順位付け)
7-15 古のSQL(条件分岐その1)
7-16 古のSQL(条件分岐その2)
7-17 連続した空白を一つに置換
7-18 時間内の特定レコードの存在チェック
7-19 レコードがあれば最大値を取得
7-20 末尾が数字のデータを取得
7-21 sum関数とcase式
7-22 指定月の日曜日を出力
7-23 短絡OR
7-24 短絡AND
7-25 経過時間を取得(低精度)
7-26 経過時間を取得(高精度)
7-27 階層問い合わせの根と葉を取得
7-28 空き番号を取得その1
7-29 空き番号を取得その2
7-30 空き番号を取得その3
7-31 最も近い日を取得
7-32 キーブレイク時に、指定行を出力その1
7-33 キーブレイク時に、指定行を出力その2
7-34 イニシャルと名前を取得
7-35 siblingsオプション
7-36 複数テーブルと完全外部結合
7-37 負数でなかったら空白を付加
7-38 連続した範囲の最大最小を取得
7-39 文字列の分割
7-40 指定した範囲のデータを取得
7-41 順序無視の重複チェック(各値の重複なし)
7-42 土曜と日曜を除いた日数を取得
7-43 sum関数とLast_Value関数
7-44 最長一致の原則で結合
7-45 部分一致する最大のレコードと結合
7-46 階層の子と子孫の数を取得
7-47 平日で3日後を取得
7-48 Nullの行を追加
7-49 小計の降順にソート
7-50 前後の値で分岐
7-51 丸め誤差分の調整
7-52 完全外部結合で行列変換
7-53 グループ化とdecode関数
7-54 引き当て処理
7-55 having句で相関サブクエリ
7-56 木の中の最大値を取得
7-57 case式と分析関数で存在チェック
7-58 nvl関数でグループ化
7-59 ハイフンの前の数字を取得
7-60 レポート作成
7-61 入室回数の降順に出力
7-62 最初のアルファベットの位置を取得
7-63 勤務履歴の作成
7-64 カレンダーテーブルと結合
7-65 共通集合以外を取得
7-66 プロジェクトごとに集計
7-67 Last_Value関数とnullif関数
7-68 ランダムに結合
7-69 (親子条件が複数で)階層問い合わせ
7-70 クロスジョインして分析関数
7-71 指定日より過去の平日を取得
7-72 外部結合で結合した行数を取得
7-73 文字列を分割してソート
7-74 売上と最新の名称を取得
7-75 全ての年月の値を出力
7-76 グループごとの縦横変換
7-77 優先順位のあるデータ取得
7-78 同じデータが連続しないようにソート
7-79 C言語やJavaの0から始まる配列に変換
7-80 階層問い合わせで部下一覧を作成
7-81 nullの列を左に詰めて表示


8 技術書などのSQLパズル

8-1 同一グループ件数と、最小かを取得
8-2 case式でis not falseを模倣
8-3 組み合わせパズルその1
8-4 組み合わせパズルその2
8-5 移動平均を求める
8-6 サイコロジカルを求める
8-7 次の入社日を求める
8-8 加重移動平均を求める
8-9 first_Value関数を模倣(ignore nullsなし)
8-10 first_Value関数を模倣(ignore nullsあり)
8-11 Last_Value関数を模倣(ignore nullsなし)
8-12 Last_Value関数を模倣(ignore nullsあり)
8-13 Lag関数とLead関数を模倣
8-14 Seqが1小さいデータも出力
8-15 2日前のデータも出力
8-16 2ヶ月前のデータも出力
8-17 SubStoreも出力
8-18 dense_Rankとrangeの組み合わせ
8-19 12進数変換とrangeの組み合わせ
8-20 集合関数のBitAND,BitOR,BitXOR
8-21 sys.odciVarchar2Listとsys.odciNumberList
8-22 集合関数のkeep指定でのdistinctオプションを模倣
8-23 分析関数のkeep指定でのdistinctオプションを模倣
8-24 to_date関数の書式指定での時分秒の省略
8-25 Oracle9iで、connect_by_rootを模倣
8-26 碁石の固まりを出力
8-27 Keep(Dense_Rank Second)とKeep(Dense_Rank Third)の自作
8-28 末日と締日の問題
8-29 Partitioned Inner Joinもどき
8-30 Oracle8iの外部結合で論理和
8-31 逆関係の行を求める
8-32 最大値または最小値のレコードを求める
8-33 count(*)で棒グラフを作成
8-34 複数列をPivot
8-35 小計を含むpivot
8-36 リーフノード,ブランチノード,ルートノードを判断
8-37 dense_Rank関数後に整形
8-38 Row_Numberを求めてPivot
8-39 指定値の行から3行後まで出力
8-40 pivotとOuter unionもどき
8-41 window指定の分析関数でLag関数を代用
8-42 その行までの最大の重複数でグループ化
8-43 Oracle9iでnocycleを模倣
8-44 YYYYMM形式の補完(固定範囲)
8-45 YYYYMM形式の補完(全体の最小から最大)
8-46 YYYYMM形式の補完(個別の最小から最大)
8-47 distinctオプション指定のwmsys.wm_concatを模倣
8-48 累計を取得(グループごと、複数ソートキー)
8-49 結合数を列値に持つ内部結合
8-50 SQLServerのgroup by allを模倣
8-51 クロスジョインやmodel句で、行の追加
8-52 ピボット選択インサート
8-53 nth_value関数を模倣
8-54 RunningSecondMaxを求める
8-55 次の入社日を求めるのアレンジ問題1


9 Joe Celko氏の記事のSQLパズル

9-1 複数行を1行に変換
9-2 和集合を求めて、スカラー問い合わせ
9-3 開始日と終了日をまとめる
9-4 空き期間を取得
9-5 一文字違いの文字列を取得
9-6 行事の間に宿泊した客を取得その1
9-7 行事の間に宿泊した客を取得その2
9-8 教室の割り当て
9-9 差集合が空集合かチェック
9-10 共通集合が空集合かチェック
9-11 子供が一致する親を取得
9-12 一対多の外部結合
9-13 任意の三日間の合計
9-14 多重度の最大値
9-15 階層問い合わせの根と葉も出力
9-16 プリンタの割り当て
9-17 最新の連続期間
9-18 存在有無のブール値を求める
9-19 件数による多分岐
9-20 電話番号簿の作成
9-21 最後の二回の給料
9-22 存在有無のブール値で論理演算
9-23 nullのないグループを出力
9-24 平均が条件を満たす集合
9-25 一つだけ0でないレコードを出力
9-26 存在しない組み合わせを出力
9-27 集合の包含関係を調べる
9-28 等しい集合が存在する、集合を求める
9-29 ソートした数列で考える
9-30 結合で作成した集合と、集合演算
9-31 過去で最大のデータをサマリ
9-32 SQL99構文での結合順序
9-33 count関数の値で分岐
9-34 過去1時間の平均
9-35 count関数の引数にRowID
9-36 卒業可能な学生を出力
9-37 順序無視でグループ化(2列)
9-38 期間内の合計の最大値
9-39 重複を排除して二つかチェック
9-40 2つの合計を求める
9-41 縦横変換してから集計
9-42 存在有無のブール値の応用
9-43 集合(重複要素を許可)の包含関係を調べる
9-44 順序無視でグループ化(3列)
9-45 順序無視でグループ化(4列)
9-46 順序無視の重複チェック(各値の重複あり)
9-47 期間内の合計
9-48 集合で考える
9-49 集合とブール代数で考える
9-50 ベクトルで考える
9-51 大きさNのリージョンを求める(境界なし)
9-52 最大のリージョンを求める(境界なし)
9-53 大きさNのリージョンを求める(境界あり)
9-54 最大のリージョンを求める(境界あり)
9-55 ランを求める
9-56 集合が等しい組み合わせを求める
9-57 集合が等しい組み合わせを求める(複数列版)
9-58 集合が等しい組み合わせを求める(重複許可版)
9-59 各列の最初の非null値をまとめる
9-60 弱い重複を求める
9-61 連続的なグルーピング
9-62 製品の対象年齢の範囲
9-63 導出テーブルを減らせ
9-64 厳密な関係除算
9-65 distinctした結果とpartitioned Anti Join
9-66 SQLで条件法
9-67 Toddの除算
9-68 結合が先か、Sum関数が先か その1
9-69 結合が先か、Sum関数が先か その2
9-70 単調増加している期間を求める


10 OTNのSQLパズル

10-1 2番目のデータを取得
10-2 Date型の年のみを変更
10-3 RowNum指定によるCountStop
10-4 最新の更新日を取得
10-5 グループ化とLast関数
10-6 累計を行列変換
10-7 累計が100以上になるまで出力(負数なし)
10-8 累計が100以上になるまで出力(負数あり)
10-9 アルファベットのソート
10-10 null以外の、以前の値を取得
10-11 Count関数にdistinctを指定
10-12 数値にキャストしてソート
10-13 リニアサーチによる探索
10-14 組み合わせごとの合計を取得
10-15 キーごとに行列変換
10-16 Group_Concat関数を模倣(最大数固定)
10-17 Group_Concat関数を階層問い合わせで模倣
10-18 Group_Concat関数をXMLの関数で模倣
10-19 FIFOで在庫単価の計算
10-20 LIFOで在庫単価の計算
10-21 ソート条件を他分岐
10-22 変化した回数を取得
10-23 連続した日付を作成
10-24 パスカルの三角形
10-25 1行を複数行に変換
10-26 割合を求める
10-27 時間の連番を作成
10-28 指定列が全て最大値もしくは最小値の行を取得
10-29 要素数が1の集合同士の直積
10-30 行を指定単位で分割
10-31 あいまい検索
10-32 distinct後の件数を取得
10-33 15分単位の集計
10-34 nvl関数とスカラー問い合わせ
10-35 グループごとに最大のデータを取得
10-36 複数行複数列に存在しないデータ
10-37 後続データの存在チェック
10-38 曜日ごとの集計
10-39 インラインビューとの直積演算
10-40 文字列の部分一致で結合
10-41 varchar2型の日付チェック
10-42 過去で最大のデータと結合
10-43 バイナリデータの指定位置を取得
10-44 バイト数に応じた0埋め
10-45 結合対象を求めて外部結合
10-46 前日との比率を求める
10-47 条件を満たす最大のデータを取得
10-48 最後に0になった日からの件数
10-49 第二金曜日を取得
10-50 金曜日一覧を取得
10-51 一行目に総合計を出力
10-52 Interval型の総合計を求める
10-53 having句でall述語
10-54 count関数で、order by指定
10-55 RowNumで削除件数を指定
10-56 結合して階層問い合わせ
10-57 全てのIDを持つかチェック
10-58 時刻印法による楽観的ロック
10-59 カンマ区切りの文字列の編集
10-60 ポイントをmerge
10-61 アルファベットを26進数に変換
10-62 先頭N件をロック
10-63 受講履歴を出力
10-64 新旧のデータ比較
10-65 全角半角の混在チェック
10-66 経過秒から時間を求める
10-67 文字列の改行を削除
10-68 グループで最大値の行のフラグオフ
10-69 グループごとの行数を取得
10-70 条件を満たす行に連番を設定
10-71 文字コードを変換してソート
10-72 日付の埋め立てその1
10-73 日付の埋め立てその2
10-74 Oracle8での順位による制御
10-75 複数行をカンマ区切りで出力
10-76 最大値と、最大値の行の合計を取得
10-77 結合して、同上をnullに変換
10-78 文字の重複を削除
10-79 不等式の移項
10-80 データの存在チェック
10-81 distinct後のグループごとの件数を取得
10-82 金額の山分け
10-83 階層の上下を取得
10-84 集計して前月分も表示
10-85 存在有無を調べる
10-86 特定の区分のみサマリ
10-87 カンマ区切りの文字列で存在チェック
10-88 IPの前ゼロを削除
10-89 SavePointで原子性を制御
10-90 指定サイズを下回るまでdelete
10-91 複数テーブルを等価結合
10-92 RowNumでスカラー副問い合わせ
10-93 前月の同一日付を取得
10-94 文字列中の指定文字の数を取得
10-95 IDごとの文字の数を取得
10-96 グループ化して分析関数
10-97 複数あれば連番を付与
10-98 数値の小数部のみを取得
10-99 合計の累計を取得
10-100 同一グループの値の種類を取得
10-101 直前の値と等しかったら削除
10-102 ログテーブルの循環使用
10-103 小数点の位置を揃える
10-104 先頭二文字で集計
10-105 ブール代数で同値変形
10-106 条件付き階層問い合わせ
10-107 UpdatableViewで更新
10-108 パターン数を取得
10-109 ANSI構文でクロスジョイン
10-110 First_nameとLast_nameを取得
10-111 最新日で最大金額の行を取得
10-112 階層問い合わせで依存性を追跡
10-113 12進数の減算で月数を求める
10-114 順序表と結合してソート
10-115 差集合の和集合
10-116 二値論理のような比較
10-117 下位10%のデータを取得
10-118 二通りの連番付与
10-119 経路の総積を取得
10-120 指定文字以外の文字がないかチェック
10-121 指定日だけ後の平日を取得
10-122 会計年度で何週目かを求める
10-123 分析関数でのignore nulls
10-124 ブール代数の分配法則
10-125 開始と終了が等しいレコードをグループ化
10-126 末尾の文字を取り出してパディング
10-127 クロス集計して空白行を追加
10-128 minus allとintersect all
10-129 オプション指定のgroup_concat関数を模倣
10-130 ignore nullsをsum関数で代用
10-131 最大値を求めてクロス集計
10-132 大小比較で場合分け
10-133 文字列が4桁までの整数か調べる
10-134 権限に応じた、データの出力
10-135 時間を示す数値の相互変換
10-136 集合の最初の値を相殺
10-137 特殊なdistinct
10-138 階層の1番目と2番目を表示
10-139 最短距離問題
10-140 前と同じ値なら、詰めて出力
10-141 重複が存在するグループを出力
10-142 命題成立時のブール代数の同値変形
10-143 Row_Number関数との差でグループ化
10-144 case式とLag関数とSum関数の組み合わせ
10-145 having句でdecode関数
10-146 各桁の数字の合計を求める
10-147 自分と祖先の総合計を求める
10-148 前後のn件の行も出力
10-149 Oracle9iでconnect_by_isleafを模倣
10-150 特殊な数列を作成その1
10-151 特殊な数列を作成その2
10-152 正規表現で、IPアドレスの左に0埋め
10-153 多対1で結合して、グループ化
10-154 集合が条件を満たすかで分岐
10-155 is not trueとis not falseを模倣
10-156 総合計に対する比率と総合計を取得
10-157 桁数で場合分け
10-158 RegExp_Instr関数の負数オプション
10-159 シェルソートのようなデータ交換
10-160 各レコードをランダムに更新
10-161 半角空白でsplit
10-162 ビット演算(AND,OR,XOR)
10-163 ビット演算(NOT)
10-164 場合の数を求めて、場合分け
10-165 全テーブルの、レコード数を数える
10-166 根からたどれないデータを取得
10-167 二番目以降の数値をゼロサプレス
10-168 ブール値を求めて論理積演算
10-169 having句にこだわったupdate文
10-170 クロスジョインで組み合わせを列挙
10-171 grouping setsに式を指定
10-172 dual表からの連番の作成
10-173 全称命題と存在命題で論理積(group化版)
10-174 全称命題と存在命題で論理積(partition版)
10-175 少なくとも1つがnullかをチェック
10-176 範囲にnullを含むかのチェック
10-177 LRU方式で追加更新その1
10-178 LRU方式で追加更新その2
10-179 同一行で最大のデータを求める
10-180 集計結果で集計
10-181 符号に応じた縦横変換
10-182 コードごとの、Top2の行の値を出力
10-183 範囲指定して、乱数を取得
10-184 存在肯定命題の真偽と、要素数のチェック
10-185 範囲内での行間アクセス(歯抜けを考慮しない)
10-186 範囲内での行間アクセス(歯抜けを考慮する)
10-187 パーティションごとの連続したグループを求める
10-188 連続してなかったらインクリメント
10-189 連続したIDごとの最大値と最小値(重複を考慮)
10-190 distinctオプションとorder by指定の分析関数を代用
10-191 葉であるか葉でないかで論理演算
10-192 高さが1小さい要素の数を求めるその1
10-193 高さが1小さい要素の数を求めるその2
10-194 日暦算の感覚で、前月の同一日までの日数を求める
10-195 任意の2文字から1文字をランダムに取得
10-196 表関数で期間内の日付を出力
10-197 SQL99構文にこだわったクエリ
10-198 existsとforallとunique
10-199 同じ行で最大の列かを調べる
10-200 having句にこだわったexists述語
10-201 多対1の外部結合を変形
10-202 正規表現の肯定先読みを代用
10-203 正規表現の否定先読みを代用
10-204 nullでない葉が存在する、高さが2以上の部分木を取得
10-205 正規表現で0以上255以下の整数かを調べる
10-206 連続範囲の累計と非連続範囲の累計
10-207 自己結合でpartitioned outer join
10-208 旅人算の感覚を使うクエリ(日付型バージョン)
10-209 指定文字のn番目の前まで取得
10-210 複数列指定のPartitioned Outer Join
10-211 distinct指定とorder by
10-212 最大値を使って、それ以下の最大値を求める
10-213 グラフの平行移動を意識したクエリ
10-214 重複を除いた訪問者数
10-215 owa_patternで正規表現
10-216 nullの列を追加して完全外部結合を代用
10-217 古のSQLでcase式を代用
10-218 wmsys.wm_concat
10-219 元集合の重複を残す差集合演算
10-220 必要な結合数(JoinCount)を求める
10-221 内部結合して値を比較
10-222 バブルソートで列をソート
10-223 セレクションソートで列をソート
10-224 バケットソートで列をソート
10-225 旅人算と存在肯定命題
10-226 OverLaps述語
10-227 存在肯定命題の真偽の論理積
10-228 Outer Unionのような完全外部結合
10-229 重複を除いた累計
10-230 旅人算の感覚(1時間間隔)
10-231 dense_rankがRowNum番目の値を取得
10-232 Row_Numberが列値番目の値を取得
10-233 移動可能な経路ごとに連番付与
10-234 クロスジョインとPartitioned Outer Joinその1
10-235 クロスジョインとPartitioned Outer Joinその2
10-236 最もbetterな行を出力
10-237 Oracle8iで、完全外部結合を模倣
10-238 縦方向の中央で折り返して出力
10-239 Last_Value(式 ignore nulls)でupdate
10-240 和集合を作成してソート
10-241 Partitioned Anti Joinもどき
10-242 having句でLast関数
10-243 場合分けを使う正規表現
10-244 存在肯定命題の論理和を同値変形
10-245 5分以上未来の最小データで経路作成
10-246 優先順位を持った多対1の外部結合
10-247 所属グループの他行の値を横並びで表示
10-248 読みやすい多段Replace
10-249 共通集合が空集合なら、元の集合を出力
10-250 12進数変換を行って、旅人算の感覚
10-251 2段階の集計
10-252 10位がなかったら、最も近い順位を出力
10-253 同じ文字列が2回現れるかを調べる
10-254 nullでない列の数でソート
10-255 nullを0としてソート
10-256 キーブレイクごとに小計を出力
10-257 単純case式と検索case式とdecode関数
10-258 分析関数で他行の合計を取得
10-259 重複を除いた集計の累計
10-260 3テーブルでのUpdatableView
10-261 前後を差が1のデータで挟まれていなければ出力
10-262 累計を求めるwm_concatをXML関数で模倣
10-263 最初に1が出現してから値が変化した行を取得
10-264 正規表現のリキャプチャ
10-265 差集合をマルチテーブルインサート
10-266 model句でコントロールブレイク
10-267 RegExp_Replace関数で区切りデータより抽出
10-268 最小数に合わせるpivot
10-269 model句で期間型のsumを求める
10-270 1列ごとのdistinct
10-271 角括弧の中身を指定文字に置換
10-272 model句でPartitioned Outer Joinもどき
10-273 年度の開始日を求める
10-274 distinct後のorder by
10-275 model句で集計行を追加
10-276 パスの最下位のディレクトリ名を取得
10-277 model句とgrouping sets
10-278 unpivotとpivot
10-279 旅人算の代わりにmodel句
10-280 model句によるレポート表作成
10-281 集合関数的なLast_Value関数を代用
10-282 dividing 5 in 3:2 ratio
10-283 最新の年月からの連続数を取得
10-284 UnPivotして連番付与
10-285 最新日から3ヶ月前まで表示
10-286 最頻値が複数あれば、最小値を持つ方を取得
10-287 木の高さ制限による枝切り
10-288 木のIDと節のIDのセットで識別
10-289 An alternative to DISTINCT
10-290 model句によるユニークアクセス
10-291 累計(重複値あり)を求めるwmsys.wm_concatもどき
10-292 クロスジョインして、minusで差集合演算
10-293 TotalとGrandTotalを求める
10-294 IDごとに、場合分けで出力行を制御
10-295 Overlapの解消
10-296 組み合わせ
10-297 重複組み合わせ
10-298 ミニミニ予約システムその1
10-299 ミニミニ予約システムその2
10-300 紐づく子供がいたら、自分と子孫を、子供の値で埋める
10-301 rollupで複合列(Composite Columns)指定
10-302 Partitioned Outer Joinして分析関数
10-303 リセット機能付の累計
10-304 stringAggをPivot
10-305 Lagな累計(ゼロクリアあり)
10-306 range '1' month preceding
10-307 where句でフィルタしてから旅人算
10-308 Lag関数とLead関数のignore nullsを模倣
10-309 model句のforループでのinterVal型指定
10-310 ソートキーに重複がある旅人算の感覚
10-311 紐づく集合の一致を調べる
10-312 複合列指定を使ったクロス集計
10-313 直近との差が1分以上ならインクリメント
10-314 複数条件で、開始と終了をまとめる
10-315 最大値の行の各値を1行にまとめる
10-316 旅人算の感覚で連続数を求める
10-317 階層問い合わせで迷路問題を解く
10-318 最も近い30分単位の時間に変換
10-319 Partitioned Outer Joinで全体の最小から最大まで補完
10-320 ユニークな時間にインクリメントしてselect
10-321 再帰with句で行を分割
10-322 行を補完しつつ累計を求める
10-323 年ごとの四半期を求める
10-324 範囲を過不足なく埋めるかのチェック
10-325 最小上界な行がなければ、最大下界を取得その1
10-326 最小上界な行がなければ、最大下界を取得その2
10-327 最大下界の行でupdate
10-328 連続した3日のセットを出力できるだけ出力
10-329 連続した範囲をまとめ、最も優先される期間を出力
10-330 Siteごと,全Site,全Site(Japanは除く)で集計
10-331 可変個のカンマ区切りの数字でソート
10-332 深さ優先探索順(Levelでソートキーを変更)で出力
10-333 経路上の各レベルの値を表示
10-334 経路探索で別の木で訪問済ノードを避けて探索
10-335 model句で欠番の順次使用
10-336 行間の差の最大値も取得するナップサック問題
10-337 子ノードでの総和を計算
10-338 再帰with句を非再帰なwith句で模倣
10-339 等しい集合を持つグループを、外部結合で見つける
10-340 最新の2レコード以上連続した期間を出力
10-341 ActiveからInActiveまでの期間を求める
10-342 重複する間隔をまとめて、その合計を求める
10-343 To_DsInterVal関数でInterVal型に変換
10-344 同一行複数列中で最小上界か最大下界の値を取得
10-345 再帰with句で外部結合後のWhere句で枝切り
10-346 再帰with句の再帰項でLeft Join
10-347 表関数で配分値の割当
10-348 cycle句で繰り返し防止
10-349 旅人算メソッドで連続日付をグループ化
10-350 担当した期間をまとめる


11 数学パズルを題材としたSQLパズル

11-1 ぶどうの房パズル初級編
11-2 ぶどうの房パズル上級編
11-3 サムライン
11-4 因子の部屋
11-5 連環の数 初級編
11-6 連環の数 上級編
11-7 王様の財宝
11-8 白雪姫のリンゴ
11-9 桃太郎のキビ団子
11-10 まま子立て
11-11 川渡り 船の移動
11-12 引き算でGO
11-13 サイコロの目の積が15の倍数となる確率
11-14 覆面算
11-15 8王妃問題


12 情報処理技術者試験のSQLパズル

12-1 同じ氏名がいる人を取得
12-2 年下のリーダーを持つ会員を取得
12-3 グループの平均年齢を取得
12-4 結合して件数を取得
12-5 not existsで集合の商演算
12-6 第4正規形を分解前に戻す
12-7 第5正規形を分解前に戻す


プロジェクトオイラー

Problem001 1000未満の3か5の倍数の自然数の合計
Problem002 フィボナッチ数列の偶数の項の総和
Problem003 600851475143の最大の素因数
Problem004 3桁の数の積で表される回文数のうち最大のもの
Problem005 1から20までの整数全てで割り切れる最小の値
Problem006 最初の100個の自然数の、和の2乗と2乗の和の差
Problem007 10001番目の素数
Problem008 5つの連続する数字の積の最大値
Problem009 a+b+c=1000となるピタゴラス数
Problem010 200万以下の全ての素数の和
Problem011 上下左右斜めの、連続する4つの数字の積
Problem012 501個以上の約数をもつ最初の三角数


model句のサンプル

01 HelloWorld
02 総積を求める
03 count(distinct Val) over(order by SortKey)の代用
04 wmsys.wm_concatの代用
05 pivotをあえてmodel句で
06 all_objectsやall_catalogやdictの代用
07 1から100までの和を求める
08 having句の次にmodel句が評価される
09 連続した置換で、最初の文字のみを残す
10 upsertでinsertされた場合のデフォルト値
11 work変数を用意して正規表現
12 (固定値での)Partitioned Outer Joinもどき
13 列値を昇順にソート
14 外部結合してPivot
15 until句は後判定繰り返し
16 model句での累計取得
17 Partitioned Outer Joinもどき
18 nestedセル参照で、階層の根と葉の値を求める
19 rules句の評価順序
20 rules句で、case式で場合分け
21 複雑な計算結果を使った計算
22 MySQLのgroup_concatもどき
23 MySQLのgroup_concat(distinctオプション付き)もどき


再帰with句のサンプル

01 階層問い合わせのLevel擬似列を模倣
02 階層問い合わせのsys_connect_by_path関数を模倣
03 階層問い合わせのorder siblings byを模倣
04 階層問い合わせのconnect_by_IsLeafを模倣
05 階層問い合わせのconnect by nocycleを模倣
06 ナイト巡回問題
07 最短距離問題
08 最小全域木問題
09 総積を求める
10 数独を解く


Javaストアドプロシージャのサンプル

1 HelloWorld
2 正規表現の先読み
3 RegExp_Like(Replace,Substr,Instr,Count)


PL/SQLでアルゴリズム問題

1 正規表現の[0-9]+を模倣
2 ナップサック問題
3 ナイト巡回問題
4 (行儀の良い)ナイト巡回問題
5 階層問い合わせを模倣(nocycle対応)
6 川渡り 農夫と狼とヤギとキャベツ
7 数独


Windows版Oracleツール

1 SQLPlusWとSQLPlus
2 SQLPlusWの設定
3 SQLPlusの設定
4 SQLスクリプト
5 Login.SQL
6 Oracleとの接続確認
7 オートコンプリート


明智重蔵のブログ


Oracleの豆知識

01 sysdateの値を変更
02 Oracleのバージョンを表示
03 仮想テーブル
04 面白かったクエリ
05 正規表現のベンチマークテスト
06 Like演算子のメタキャラのエスケープ
07 セッションのみで有効なシーケンス
08 関数の引数一覧
09 階層問い合わせと、木構造
10 group by句
11 Oracleで覚える英単語
12 sqlldr■exp/imp■expdp/impdp
13 日付リテラル■日時リテラル
14 便利なシノニム
15 文字列の空白埋め比較
16 PL/SQLで、Javaのbreak文とcontinue文
17 フラッシュバッククエリを使ったUpdate文で、データ復旧
18 実行したSQLのバインド変数の値の取得
19 実行したSQLを動的パフォーマンスビューから取得
20 簡易接続


数学の豆知識

九去法
ブール代数と命題論理


オープンソースソフト

ペースト君(VB.NET)
倉庫番


姉妹サイト

MySQLパズル
PostgreSQLパズル
DB2 SQLパズル
正規表現パズル
ブール代数パズル
Javaアルゴリズムパズル
C#のサンプル集
C++のサンプル集
SQLServerのSQLのサンプル集
JavaScriptのサンプル集
PHPのサンプル集
競技プログラミングのソース置場
競技プログラミングのソース置場(Old)
開発ツールのメモ
WordPressに関するメモ
増井さんの書籍の問題を解いたソース