CodeGym /コース /SQL SELF /SQLの数値関数:丸め、余り、べき乗と平方根

SQLの数値関数:丸め、余り、べき乗と平方根

SQL SELF
レベル 8 , レッスン 3
使用可能

SQLってテキストやテーブルだけじゃないんだ。実際のデータベースでは、価格、数量、スコア、パーセント、座標みたいな、つまり数字をよく扱うよ。想像してみて:

  • 割引を計算して、合計金額を整数に丸めたいとき。
  • 偶数/奇数の学生データを出したいとき。
  • スコアの分析をして、分散の平方根を知りたいとき。
  • または、スコア計算の式でべき乗を使いたいとき。

SQLなら、外部のプログラミング言語を使わなくても、こういうの全部クエリの中でできるんだ。組み込みの数学関数を使えばOK。今日は特によく使う6つを紹介するね:

  • ROUND() — 丸め
  • CEIL() — 切り上げ
  • FLOOR() — 切り捨て
  • MOD() — 割り算の余り
  • POWER() — べき乗
  • SQRT() — 平方根

* 数字の丸め:ROUND()CEIL()FLOOR()*

小数(例えば4.67891)を扱うとき、結果を丸めたいことがよくあるよね。例えば平均点や注文の合計金額、割引率とかを計算するとき、小数点以下が多すぎると見た目が悪いし、混乱のもとになることも。

ROUND() — 数学的なルールで丸める

ROUND(数値 [, 桁数])
  • 数値 — 丸めたい数字。
  • 桁数(オプション) — 小数点以下に残す桁数。

例:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND()は普通の数学の丸めと同じ:4.5 → 5、4.49 → 4。

お金やスコアをキレイに表示したいときに超便利:4.333334.33

CEIL()切り上げて一番近い整数にする

SELECT CEIL(4.1);  -- 5
  • すでに整数なら、そのまま。
  • 必ず元の値以上の整数を返す。

例えば、商品をページに分けて表示したいときに便利:21個の商品を1ページ10個で表示 → 3ページ必要。

FLOOR()切り捨て

SELECT FLOOR(4.9);  -- 4
  • 元の値以下の整数を返す。

値がどの「階」や「段」にいるかを知りたいときに使うよ。

比較:

ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* 割り算の余り:MOD()*

余りって何に使うの?例えば:

  • 数字が偶数かどうかチェックしたいとき。
  • 行をパターンでグループ分けしたいとき(例:3チームに分ける)。
  • 繰り返しのサイクルを作りたいとき(例:「5つごとに」)。

構文:

MOD(被除数, 除数)

例:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

注意:余りの符号は最初の引数(被除数)の符号に依存するよ。

使い方:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN '偶数' ELSE '奇数' END AS parity
FROM students;

* べき乗:POWER()*

ただ掛け算するだけじゃなくて、数式を使いたいとき:

  • パーセント計算:base * POWER(1 + rate, years)
  • 円の面積:π * r^2
  • 機械学習の式の重み付け

構文:

POWER(基数, 指数)

例:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (平方根)

この関数は整数も小数もマイナスもOK。

平方根:SQRT()

平方根を計算したいとき、特に統計(例えば標準偏差)でSQRT()が役立つよ。

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

マイナスの数を渡すとエラーになる。そうなりそうなときはABS()を使おう:

SELECT SQRT(ABS(-25));  -- 5

実用シナリオ

シナリオ1:注文合計金額の丸め

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

シナリオ2:ページ数の計算

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

シナリオ3:学生を3グループに分ける

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

シナリオ4:平均二乗根

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

よくあるミスとアドバイス

ROUND()は2つ目の引数も取れるよ。小数第2位まで丸めたいときは忘れずに。

MOD()はマイナスの数だと予想外の結果になることがある。

POWER()SQRT()は小数も扱えるから、必要ならCAST()を使ってね。

SQRT()にマイナスが入らないように注意。入ると実行時エラーになるよ。

2
タスク
SQL SELF, レベル 8, レッスン 3
ロック未解除
数値を整数に丸める
数値を整数に丸める
2
タスク
SQL SELF, レベル 8, レッスン 3
ロック未解除
円の面積の計算
円の面積の計算
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION