CodeGym /コース /SQL SELF /数値データ型: INTEGER, NUMERIC,

数値データ型: INTEGER, NUMERIC, FLOAT

SQL SELF
レベル 15 , レッスン 1
使用可能

今日はPostgreSQLの数値データ型について話すよ。もし「42」みたいな数字や、ファイナンスの計算、あるいはミリ秒を保存したいと考えたことがあるなら、ここがピッタリ。どの型がどんな場面に合うのか、一緒に見ていこう。君と君のデータが快適に過ごせるようにね。

PostgreSQLの数値データ型は大きく3つのグループに分かれてる:

  1. 整数 (INTEGER): 小数点以下がない数字を保存するための型。1、42、-7みたいな馴染みのある数字だね。
  2. 正確な数値 (NUMERIC): 小数点以下の桁数が決まってる数字を保存するための型。ファイナンス計算とか、精度が命なときに便利。
  3. 浮動小数点数 (REAL): めっちゃ大きい数字や、すごく小さい数字を保存したいときに使う。NUMERICより精度は落ちるけど、サイエンス系の計算には十分!

INTEGER

INTEGERは整数用のデータ型。小数点以下がいらない数字を保存したいときにピッタリ。PostgreSQLには3種類のINTEGERがあって、いろんな範囲をカバーできる:

  • SMALLINT: 小さい整数用。範囲:-32,768〜32,767。
  • INTEGER(またはINT: 標準的な整数型。範囲:-2,147,483,648〜2,147,483,647。
  • BIGINT: でっかい数字用。範囲:-9,223,372,036,854,775,808〜9,223,372,036,854,775,807。

例えば、studentsというテーブルがあって、学生の名前・年齢・取得クレジット数(単位数)を保存してるとしよう:

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

じゃあ、SQLで学生の名前・年齢・クレジット数を一覧で出してみよう:

SELECT name, age, credits
FROM students;

結果:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

INTEGERを使うタイミングは?

  • 識別子(idや注文番号など)を保存したいとき。
  • 何かの個数(在庫数や学生数など)を保存したいとき。

NUMERIC

NUMERICは小数点以下の桁数が決まってる正確な数字用のデータ型。たとえば123.456みたいな数字で、小数点以下1桁でもズレたら信用(やお金)が吹っ飛ぶようなときは、絶対NUMERICを使おう。

宣言フォーマット:NUMERIC(precision, scale)。ここで:

  • precision — 全体の桁数(小数点の前も後も含む)。
  • scale — 小数点以下の桁数。

例えば、NUMERIC(6, 2)なら最大6桁で、そのうち2桁が小数点以下になる。

じゃあ、ファイナンスのトランザクションを記録するテーブルを作ってみよう:

id description amount
1 学費の支払い 2345.67
2 毎月の奨学金 500.00
3 ラボ利用料 145.99
4 図書館の罰金 12.75
5 カンファレンス登録 320.50

じゃあ、トランザクション一覧を出してみよう:

SELECT description, amount
FROM transactions;

結果:

description amount
学費の支払い 2345.67
毎月の奨学金 500.00
ラボ利用料 145.99
図書館の罰金 12.75
カンファレンス登録 320.50

NUMERICを使うタイミングは?

  • ファイナンス計算(商品の値段や給料など)。
  • 正確な計測値(重さや長さなど)を保存したいとき。

measurementsテーブル

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

じゃあ、値を出してみよう:

SELECT mass, height
FROM measurements;

結果:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

REALを使うタイミングは?

  • サイエンス系の計算(原子の質量や月までの距離など)。
  • 多少の誤差が許されるデータのモデリング。

数値型の比較:どれをいつ使う?

データ型 範囲 精度 使いどころ例
SMALLINT -32,768〜32,767 整数 小さい数字(年齢、レーティングなど)。
INTEGER -2,147,483,648〜2,147,483,647 整数 識別子、個数など。
BIGINT -9,223,372,036,854,775,808〜9,223,372,036,854,775,807 整数 めっちゃ大きい数字。
NUMERIC precisionscaleによる 正確な小数 ファイナンス、計測値。
REAL 約6桁の小数 浮動小数点 ざっくりしたデータやサイエンス系。
DOUBLE PRECISION 約15桁の小数 高精度な浮動小数点 サイエンス、リサーチ。

エイリアス

PostgreSQLの数値型にはたくさんエイリアス(別名)があるよ。これは型の別名で、動作は同じだけど読みやすさや他のDBとの互換性が良くなる。

PostgreSQLの数値型エイリアスをざっくりまとめると:

整数型のエイリアス

エイリアス 本当の型 サイズ 範囲
INT INTEGER 4バイト −2,147,483,648〜2,147,483,647
INT4 INTEGER 4バイト (古いエイリアス)
SMALLINT SMALLINT 2バイト −32,768〜32,767
INT2 SMALLINT 2バイト
BIGINT BIGINT 8バイト −9クインティリオン〜+9クインティリオン
INT8 BIGINT 8バイト

正確な数値のエイリアス

エイリアス 本当の型 用途
DEC NUMERIC SQL標準のシノニム
DECIMAL NUMERIC 同じく

浮動小数点数のエイリアス

エイリアス 本当の型 精度
FLOAT DOUBLE PRECISION ~15桁(デフォルト)
FLOAT(24) REAL ~6桁
FLOAT(53) DOUBLE PRECISION ~15桁
FLOAT8 DOUBLE PRECISION 古いエイリアス
FLOAT4 REAL 古いエイリアス

よくあるミス

数値型を使うとき、いくつかの落とし穴があるよ:

データ型の選択ミス。 例えば年齢をSMALLINTで保存したら、マトリックスのロボットみたいに何百万年も生きてるやつには足りないかも。

丸めによるデータ損失。 ファイナンス計算でREALを使うと、1円単位でズレることも。信頼も失うかもね。

異なる型の比較。 INTEGERREALを比較すると、浮動小数点の仕様で思わぬ結果になることがある。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION