sql

ランダム抽出

親テーブルのデータに関連する子テーブルのデータから一件ランダム抽出して表示する場合 SELECT x, (SELECT y FROM test_b WHERE test_a.x = test_b.x ORDER BY RANDOM() LIMIT 1) AS y FROM test_a; でも出来るけど、親の件数分サブクエリが実行されてしま…

名前が被った時

列の別名 - 総天然色頁の続き。 SELECT 1 + 1 AS val, val * 10 AS val2 は、下記のようになります。 val val2 2 20 名前が被った場合は、解決順が変わるみたいです。 SELECT val + 1 AS val, val * 10 AS val2 FROM (SELECT 1 AS val) AS x val val2 2 10

再帰でピボットテーブル

sql

『アート・オブ・SQL』(ISBN:9784873113364)が手元にないのでうろ覚えでやったら、資料見たりで5分以上かかったので、次使うこと考えてメモしておきます。 実在するテーブル使わないとWITH RECURSIVEでエラーになるDBMS用。 っていうか、最初からテーブル(…

SQLでFizzBuzz

sql

SQLでFizzBuzz - いろいろ解析日記見てたら、もうちょっと短く出来そうだったので、リハビリがてら書いてみた。 ANSI SQL-2003 T441準拠なので、大半のRDBMSで動くはず(SQLite以外?) select coalesce(f||b, f, b, i) as r from (select i, case mod(i,3) wh…

パーティション基本索引覚え書き(1)

パーティション基本索引(Partition Primary Index = PPI)を使うことで、テーブルのパーティショニングが可能。 テーブルのパーティショニングなので、SIには設定できない。 PRIMARY INDEX (COL1, COL2, ...) の後に PARTITION BY パーティショニング条件を付…

理事長のSQLパズル:階層つき分類の粒度・解答編

ちゃんと回答する前に解答が出てしまいました…。 さて、A案の擁護はこの程度で終えるとして、最後に、はてなブックマークで kamataro さんからコメントを戴いた、A案とB案の併用、つまり、3列 + 1列の合計4列持つ方法はどうか、という質問にお答えしましょう…

SQLパズル:文字列中の重複する文字を削除する

文字列中の重複する文字を削除する - ミックのブログもろに手続き型で解いてみた。 with recursive temp (word_key, idx, word_txt) as ( select word_key, 1 as idx, cast(substring(word_txt from 1 for 1) as varchar(25)) as word_txt from WordList uni…

Oracle SQLパズル2-3-28

某所でコメント書いたけど特に反応がなかったので、自分の所でちゃんとやってみる。 問題篇 1から開始される連番の、空き番号の最小値を求める。ということで以下のようなルールになります。 1,2,4,5,6なら3が返る。 2,3,4,5,6なら1が返る。 1,2,3,4,5,6なら…

アート・オブ・SQL(isbn:4873113369):その3

ピボットの記述がとても勉強になりました。これだけで書籍代の1/2くらい元を取った気がする。 今までもなんとなくで使っていた部分もあるんですが、動的にピボット用のテーブルを作ることで、縦でも横でも自由自在という感じ。

アート・オブ・SQL(isbn:4873113369):その2

キン肉マン二世を読んだばかりなので、OLAP関数とか見ると笑いが止まりません。 逆から読むとPALOスペシャル。*1 関係無いけど、クロエってJoJoのキラークイーンっぽいですね。趣味で調べてみた以外でOLAP関数って使った事無いけど、普通に使ってる現場って…

アート・オブ・SQL(isbn:4873113369):その1

正規表現とSQLはどこ行っても大した事をさせてもらえなくて腕が鈍る一方なので、久しぶりに勉強してみたら4章で詰まった。 1:nの結合結果を1側の件数に倒す場合に、distinctでなく存在テストを使えと言っている???

SQLでの正規表現

@ITのSQLクリニックを見て愕然。SQL99の正規表現検索はSIMILAR述語じゃないのか? http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_2a.htmlまあ、SUBSTR、INSTR、REPLACEと合わせての対応だから、これはこれでいいのか?