1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLのコード・関数を表一覧にしてみた

Posted at

SQLで使用する構文や関数です。
毎回、何があるか思考が散らばってしまうので、一時見直しのためのメモです。
詳しい内容は、ググって調べるとする。


・SQLコード・関数 

コード・関数 内容 メモ
join 内部結合
left join 外部結合 左
right join 外部結合 右
full join 外部結合 全部
self join 同テーブル結合 結合のコードに -1 を記述し1レコードずらす
cross join 同テーブル結合 総当たりで結合。3レコードあれば3×3で9レコードになる
infull 結合後のnullの置換 infull(フィールド、置換する文字・数字)
coalesce 結合後のnullの置換 coalesce(フィールド、置換するフィールド)
<, <> 非等値結合 マーケットバスケット分析 例:1id の買い物(三点買ったとする)の総組み合わせが表示される
union 集合演算子 aとbいずれかに含まれるという意味(和集合)
union distinct 集合演算子  重複を許さず、結果テーブルから除く ※重複とはselect句で取得している全フィールドの内容が一致。一致してなければ除外されない
union all 集合演算子  重複を許し、結果テーブルに残す
intersect 集合演算子  aとb両方に含まれる(積集合)
except 集合演算子  aとbに両方に一致するものは表示されない。一致しないaのレコードが表示される
with 仮想テーブルの作成 with 仮想テーブルの名前 as (仮想テーブルを作成するsql文)。複数作成することも可能
sum(if()) sum(if(値 + 比較演算子 ,数値が含まれているフィールド,0)) 単一のフィールドで指定カテゴリの合計金額を出したいときに使う
if(比較演算子,1,0) if(比較演算子,1,0)で特定の値にフラグ、目印をつける
unnest GA4のカラム入れ子を解く RECORD型のデータ(1レコードに仮想的なテーブルが埋め込まれている)の入れ子を解く




数値系の関数↓
コード・関数 内容 メモ
floor() 切り捨て
ceil() 切り上げ
round() 四捨五入 round(フィールド、数字) 数字の箇所で四捨五入の下桁の数が決まる
abs() 絶対値を求める
mod() 割り算の余りを求める 例 mod(フィールド、フィールドの数を割り算する数字) =0
rand() 疑似乱数を発生させる 例 order by rand() limit 数字 で毎回絞り込む数字が変わる
cast() データ型を変換する 例 cast(数字 as データ型)  string, float64,int64,bool.date など




文字列の関数↓
コード・関数 内容 メモ
concat() 文字を結合する 例 concat(フィールド(文字系), "何かの文字") フィールドの値同士の結合も可能 文字列型以外の文字列も文字列とみなされるconcat(数値, "何かの文字",数値)
substr() 文字列の一部を取り出す 例 substar(対象文字列, 位置, 文字数)
left() 文字列を左から取り出す 例 left(フィールド文字, 取り出す文字の数)
right() 文字列を右から取り出す 例 right()フィールド文字,取り出す文字の数)
instr() 文字列の出現位置の整数 例 instr(対象文字列、検索文字列、検索開始位置、出現回数)  substarと組み合わせて位置と文字数を指定することができる
strpos() 文字列の出現位置の整数(簡易版) 例 strpos(対象文字列, 検索文字列)
replace() 文字の置換 例 replace(対象文字列, 検索文字列, 置換後の文字列) 
length() 文字列の長さを数値で取得する 例 length(文字列のフィールド)




正規表現の関数↓(メタ表現)
コード・関数 内容 メモ
regexp_contains() 指定した数値があるか判定r は正規表現を示す文字 例 regexp_contains(フィールド, r"\d{8}\d*| \d{4} - \d{4})") \d は任意の数字、{8} は直前の文字が8回連続している。true,false が戻り値 \d*は0回以上の数字の繰り返し 最低8回連続した数字でさらに数字が続いてもよいという意味になる。\d{4} - \d{4} は4回連続した数字と - 4回連続した数字
regexp_extract(対象文字列、正規表現、検索開始位置、出現関数) 出現回数を指定するときにつかう
regexp_replace() 指定した文字列を置換する regexp_replace(対象文字列、正規表現、置換後の文字列) regexp_replace(フィールド, r"\d{8}\d*




日付の関数↓

コード・関数 内容 メモ
current_date date型 本日の日付 2012-01-01 例 current_date("asia/tokyo")もしくは"+9"で日本と指定する
current_datetime datetime型 本日の日付と時間 2012/01/01 10:30:00
current_time time型 本日の時間10:30:00
current_timestamp timestampl型
date_add() 日付に一定の値を加える date_add(date型の値、interval、加える整数 year/ quater/ month/ week/ day)
datetime_add() 日付・時間に一定の値を加える datetime_add(date_time型の値、interval、加える整数 year/ quarter/ month/ week/ day/ hour/ minute/ second/ millisecond/ microsecond)
date 文字列を日付に変換する 例 select date "2019-05-01" as reiwa で文字列を日付に変換できる
datetime 文字列を日付・時間に変換する 例 datetime(2020,7,12,15,0,0) → 2020-07-12 T15:00:00
date_diff() 日付の差分を取得する date_diff(date型の新しい日付、data型の古い日付、デイトパート)
datetime_diff() 日付・時刻の差分を取得する datetime_diff(date型の新しい日付、data型の古い日付、パート)
date_trunc() 日付を丸める date_trunc(date型の値、デイトパート)  例 
datetime_trunc() 日付・時間を丸める datetime_trunc(datetime型の値、パート) 例 datetime_trunc(フィールド(日付), month)
extract() 日付の属性を指定する extract(日付の属性 from date型の値) 日付の属性の種類 year, quarter , month, day,week,dayofyear(年の中の何日目かを表す整数),dayofweek(曜日を表す整数)
format_date 表示形式を指定するキーワード format_date(表示形式を指定するキーワード, date型の値)
format_datetime 表示形式を指定するキーワード format_datetime(表示形式を指定するキーワード, datetime型の値)




統計集計関数↓

コード・関数 内容 メモ
var_pop/ var_samp 分散を求める 全数は pop 標本は samp  例 select year var_pop(min_wage)
stddev_pop/ stddev_samp 標準偏差 全数は pop 標本は samp 例 select year stddev_pop(min_wage)
corr 2変数の相関係数を求める 正の相関か負の相関か。 1 から 0 から -1で表される
order byの特殊な使い方 "ORDER BY MOD(MAX(cast(day_number AS int64)), 7) こう記述すると日曜から土曜まで曜日を順序良く表示できる"

まとめ

構文や関数の思考の紐付け的な役割のようなメモです

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?