アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

SQL

複数の条件のCOUNT値を取るときのSQL速度検証

SQL

※MySQLを前提として書いていますまあ前にも似たようなことをやってるんですが 以下のテーブル「table」があるとします。 id a b 1 1 3 2 2 4 3 1 5 4 2 NULL 5 2 NULL ここから、 「aが1であるレコードの数」 「aが2であるレコードの数」 「bが3であるレコー…

2つのデータベース間の差分を求めるクエリ

SQL

※MySQLを前提として書いています本番環境と開発環境に違いがないか確認するのが面倒でテンプレクエリ作ったのでメモ。 テーブル構成の差分を求める 以下クエリで、「database_1」「database_2」を比較し、 いずれか片方にしかないカラムを取得することができ…

ランダムで取得&速度検証

SQL

※MySQLを前提として書いています`table` テーブルよりランダムで1件取得したいという場合、次のように書きます。 SELECT * FROM `table` ORDER BY RAND() LIMIT 1 ランダムなので当然なのですが、実行のたびに結果が変わります。 つまり、ページャーを用いる…

GROUP句で「n件ごと」にまとめる

SQL

※MySQLを前提として書いていますややタイトル詐欺。1000件ごとの統計情報(件数、平均値、合計値…など)を出したいことがあったので以下のようなクエリで解決。 -- ざっくり1000件ごとの件数、平均、合計、最小値、最大値 SELECT MIN(`id`) AS `id_min` ,COU…

NULLの場合に別の値を使用する

SQL

NULLを別の値に置き換える方法。 SQLServerとMySQLで異なっていたので両方記載。 -- SQLServer SELECT ISNULL(`hoge`, 0) FROM `table`; -- MySQL SELECT COALESCE(`hoge`, 0) FROM `table`; これで「tableテーブルのhoge列を取得(ただしNULLなら0とする)…

データ処理の件数を制限する

SQL

データを1件だけSelectやDeleteしたいときの書き方。SQLServerとMySQLで異なっていたので両方メモ。 -- SQLServer SELECT TOP(1) * FROM `table` ORDER BY `column`; DELETE TOP(1) FROM `table` ORDER BY `column`; -- MySQL SELECT * FROM `table` ORDER B…

重複レコードを削除

SQL

※MySQLを前提として書いています 移転前の記事で書いてたクエリがめちゃくちゃ頭悪かったので完全に書き直し。 やりたいこと テーブル `table` があるとする。 フィールドは `id`, `hoge` の2つで、`id` がプライマリキー。`hoge`の値が一意でない場合、重複…

【未解決】ワイルドカードとエスケープ

※MySQLを前提として書いています ※この記事では、MySQLのバージョンは5.6です ※以下、「\」となっているのは半角バックスラッシュです。SQLのワイルドカードには「%」と「_」があります。 -- 「hoge」で前方一致検索 SELECT * FROM `table` WHERE `column` L…

大量のテストデータを作る

※MySQLを前提として書いています WEBアプリ・データベースにデータを作る話。少なくとも自分の場合、テストデータを作るときは大きく分けて下記の3パターンがあります。 ロジックのテスト等の用途で、パターンを網羅したデータを揃える 負荷テスト等の用途で…

COUNT関数の使い方と速度検証

SQL

※MySQLを前提として書いています COUNT関数の基本的な使い方いろいろ -- `table`テーブルの件数(全件) SELECT COUNT(*) AS `count` FROM `table`; -- `table`テーブルの件数(カラム指定) -- この場合、指定されたカラムがNULLでないものをカウント。 -- プ…

HAVING句の使い方と速度検証

SQL

※MySQLを前提として書いています「HAVING句は使うな」とよく言われていたので未だに使ったことがないのですが、 なんだかよくわからないまま使わないというのも何なので、今更。そもそもHAVING句とは、 「GROUP句でグループ化した結果を絞り込む」ためのもの…

複雑な条件でGROUP BYする

SQL

※MySQLを前提として書いています下記Aのテーブルについて、 「idが4未満と4以上のグループに分けて、 それぞれで一番小さいvalueをSELECT」 してBの結果が欲しいとき… (A) test_table --------- id value --------- 1 68 2 15 3 32 4 19 5 73 6 59 ---------…