カラムの値を使って計算する

SELECT のカラムリストには、カラムの値を使った計算式を書くことができます。
計算の実習のため、テーブル meibo に以下の2つのカラムを追加して下さい。

列名データ型
heightfloat
weightfloat

heightとweightにはphpMyAdminを用いて以下の例のように値を設定しておきます。

idnamerubybirthdayemailheightweight
1山田太郎ヤマダタロウ1997-7-1yamada@example.com17180
2碇シンジイカリシンジ2003-6-6shinji@example.com15745
3古代進コダイススム1997-10-31kodai@example.com17570
4渡瀬青葉ワタセアオバ2001-9-17awatase@example.com17063

カラムの追加等の操作方法が判らない場合は、以下のSQLを実行してください。

SQL
DROP TABLE IF EXISTS `meibo`;

CREATE TABLE `meibo` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `ruby` varchar(40) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `height` float NOT NULL,
  `weight` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO `meibo` (`id`, `name`, `ruby`, `birthday`, `email`, `height`, `weight`) VALUES
(1, '山田太郎', 'ヤマダタロウ', '1997-07-01', 'yamada@example.com', 171, 80),
(2, '碇シンジ', 'イカリシンジ', '2003-06-06', 'shinji@example.com', 157, 45),
(3, '古代進', 'コダイススム', '1997-10-31', 'kodai@example.com', 175, 70),
(4, '渡瀬青葉', 'ワタセアオバ', '2001-09-17', 'awatase@example.com', 170, 63);

カラムの値を使って計算する

演算子・関数

SELECT のカラムリスト内では様々な演算子や関数が使えますが、ここではよく使われる算術演算子・算術関数を挙げます。

算術演算子

記述意味
+加算
減算
/除算
*乗算
%剰余(割り算のあまり)

算術関数

記述意味
MOD(X,Y)X%Yと同じく、剰余を求めます
POW(X,Y)XYを求めます
ROUND(X,D)浮動小数点数Xwo小数点以下D桁目で丸めます(D+1桁目を四捨五入します)

MOD(X,Y) X % Y と同じく、剰余を求めます。
POW(X,Y) XYを求めます。
ROUND(X,D) 浮動小数点数Xを小数点以下D桁目で丸めます。(D+1桁目を四捨五入します)

カラムの値を使った計算の例1

まず、1つのカラムの値を使った例を挙げます。

SQL
SELECT name, weight-10 FROM meibo;

この例では、各レコードのカラム weight の値を10ずつ減らした結果を求めています。

実行結果
nameweight-10
山田太郎70
碇シンジ35
古代進60
渡瀬青葉53

カラムの値を使った計算の例2

複数のカラムの値を使った計算もできます。

例として、テーブル meibo 上の各レコードについて BMI を求めてみます。

BMI とは肥満度を表す値で、体重(kg)÷(身長(m)2 )で求められます。
(身長の単位がmであることに注意して下さい)
例えば身長が170cm、体重が65kgの場合は、60÷1.72≒22.5 となります。
ちなみにBMI=22~23が適正とされています。

これを求めるSQLは以下のようになります。

SQL
SELECT name,weight/(height/100)/(height/100) FROM meibo;

heightはcm単位なのであらかじめ100で除算してm単位に換算しています。

nameweight/(height/100)/(height/100)
山田太郎27.358845456721728
碇シンジ18.25631871475516
古代進22.857142857142858
渡瀬青葉21.79930795847751

※環境によって微妙に精度が違う場合があります

計算結果に別名を付ける

前の例では結果のカラム名が計算式そのままになっています。
これはAS句を使って別名を付けることができます。

SQL
SELECT name,weight/(height/100)/(height/100) AS BMI FROM meibo;
実行結果
nameBMI
山田太郎27.358845456721728
碇シンジ18.25631871475516
古代進22.857142857142858
渡瀬青葉21.79930795847751

関数を使う

例1

まず、(height/100) で2回除算している部分を、POW関数を用いて書き直してみましょう。

SQL
SELECT name, weight/POW((height/100),2) AS BMI FROM meibo;
実行結果
nameBMI
山田太郎27.358845456721728
碇シンジ18.25631871475516
古代進22.857142857142858
渡瀬青葉21.79930795847751

当然、同じ結果となります。

例2

さらに、ROUND関数を用いて小数点以下第1位までで丸めてみましょう。

SQL
SELECT name, ROUND(weight/POW((height/100),2), 1) AS BMI FROM meibo;
実行結果
nameBMI
山田太郎27.4
碇シンジ18.3
古代進22.9
渡瀬青葉21.8

練習問題

テーブル ex_shohin のカラム price の値を税抜き単価として、下の例のように消費税額を計算するSQLを記述しなさい。小数点以下は四捨五入しなさい。(ヒント:消費税額は税抜き価格に0.08をかけた値)

結果例
namepricetax
いちご20016
にんじん18014
サラダ菜16013
ヨーグルト24019

コメント

タイトルとURLをコピーしました