【SQL・DB基礎編 第2回】データの罠を回避せよ!実務で輝く「型変換(CAST)」と高度な集計テクニック
前回の基礎編第1回では、データの矛盾を防ぐ「正規化」という設計思想について学びました。なぜテーブルを分けるのか、そしてなぜ「JOIN」が必要なのか、その理由が深く腑に落ちたのではないでしょうか。
設計の全体像が見えたところで、今回からは再びガシガシとSQLコードを動かす実践フェーズに戻ります!
テーマは、実務や一歩進んだデータ分析で必ず直面する「データの型変換(CAST)」と、それを組み合わせた「高度な集計」です。
「SQLで割り算をしたら、なぜか結果がゼロになってしまう…」
「文字列として保存されている数字を、数値として合計したい!」
そんな日常の「困った」を一発で解決する強力な関数をマスターし、データ処理の精度をプロレベルに引き上げましょう!
1. なぜ「型変換(CAST)」が必要なのか?
データベースに入っているすべてのデータには、あらかじめ「データ型」という属性が決まっています。
代表的なものには以下のような種類があります。
INTEGER / INT:整数(1, 2, 100 など)
DECIMAL / NUMERIC:文字通り小数点を含む数値(3.14, 0.5 など)
VARCHAR / TEXT:文字列('山田太郎', 'A20' など)
普段、私たちがExcelなどを使うときは、ソフトが自動的に「これは数字だな」「これは文字だな」と判断して計算してくれますよね。しかし、融通の利かないデータベースの世界ではそうはいきません。
例えば、「整数 整数」の計算をすると、結果も「整数」にされてしまうという暗黙のルールがあります。
もし、ある商品の価格の比率を出そうとして 3 / 10 という計算をSQLにさせると、普通なら 0.3 になってほしいところですが、整数に丸められて 0 になってしまうのです。これが「SQLの割り算の罠」です。
この罠を回避し、コンピュータに「これは小数として計算してね!」と強制的に指示を与えるコマンドが、今回主役となるCAST(キャスト)関数です。
2. CAST関数の基本構文
CAST 関数の使い方は非常にシンプルです。変えたいデータと、変換した後の型を指定するだけです。
CAST( 変換したいデータ AS 変換後のデータ型 )先ほどの「割り算でゼロになってしまう問題」を解決するには、以下のように書きます。
SELECT CAST(3 AS DECIMAL) / 10;このように 3 をあらかじめ小数を扱える型(DECIMAL や REAL)にキャストしてから割り算を行うことで、データベースは「あ、これは小数の計算なんだな」と理解し、正しく 0.3 という結果を返してくれるようになります。
また、システムによっては「商品コード」が文字列(VARCHAR)として保存されているのに、中身は数字なので足し算したい、というケースもあります。そんな時も大活躍します。
-- 文字列の'100'を整数に変換して計算する
SELECT CAST(SHOHIN_CODE AS INTEGER) + 1 FROM ...3. 【応用】集計関数・サブクエリとCASTの融合
それでは、実務でよく使われる「全体の売上に占める、各商品の価格の割合」を算出する高度なSQLを組み立ててみましょう。
これまで学んだ「集計関数(SUM)」「副照会(サブクエリ)」、そして今回の「CAST」が奇跡の融合を果たします。
以下のような、商品テーブル(SHOHIN)があるとします。

全体の価格の合計は 2000 + 5000 + 3000 = 10000 です。
各商品の価格が、全体(10000)に対してどれくらいの割合なのかを計算するSQLがこちらです。
SELECT
SNAME,
PRICE,
CAST( (PRICE / (SELECT SUM(PRICE) FROM SHOHIN)) AS DECIMAL(5,2) ) AS RATIO
FROM SHOHIN;一見すると複雑に見えますが、内側から順番に紐解いていけば簡単です!
(SELECT SUM(PRICE) FROM SHOHIN):まず、サブクエリが実行されて全体の合計金額(10000)が計算されます。
PRICE / 10000:各行の商品の価格を、全体の合計で割ります(例:マウスなら 2000 / 10000)。
CAST( ... AS DECIMAL(5,2) ):そのまま割り算すると整数になってしまうのを防ぐため、DECIMAL型(全体5桁、小数点以下2形)にキャストします。
AS RATIO:計算結果の列に「RATIO(割合)」という分かりやすい名前(別名)をつけます。
このSQLを実行すると、以下のような高度なデータ分析結果をデータベースから直接引っこ抜くことができます。

まとめ
基礎編第2回の今回は、データ分析の現場で頻出する重要なテクニックを学びました。
データベースは型に厳格。「整数 整数」の割り算は切り捨てられる罠がある。
データの型を強制的に変換するのが CAST 関数。
CAST と「サブクエリ」「集計関数」を組み合わせることで、「全体の何パーセントを占めているか」といった高度な分析データを1つのSQLで算出できる。
データの型を自由にコントロールできるようになると、SQLのエラーに悩まされる回数が激減します。実務的なデータ抽出には必須の知識ですので、ぜひ引き出しの1つに加えておいてください。
次回は、データの重複をスマートに排除する「DISTINCT」や、条件に応じて出力を切り替える「CASE式」など、さらに表現力を広げる便利なテクニックを解説します。お楽しみに!
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!