はじめに
今回は、リレーショナルデータベースを管理するための人気プラットフォームであるMySQLで減算を行う方法を見ていきます。このチュートリアルでは、基本的な算術演算から、行や日付の差を計算するといったより複雑なユースケースまで、MySQLでの減算をさまざまなシナリオで解説します。
注意: 多くのSQLの概念は異なるデータベース管理システム間でも通用しますが、この記事の例はMySQL向けに作成されています。
本題に入る前に、私たちのモダンなMySQLクライアント、Beekeeper Studioをご紹介させてください。オートコンプリート付きのSQLエディタで、ここで紹介する計算をすぐに試せます。MySQLでは無料でご利用いただけます。こちらからダウンロードしてください。
前提条件
このチュートリアルはMySQLの基本を理解していることを前提としています。MySQLがインストールされ、クエリを実行できるデータベースにアクセスできることを確認してください。
セクション1: MySQLの基本的な算術演算
数値の減算
MySQLでは、SELECT文の中で基本的な算術演算子を直接使用できます。簡単な減算は次のように行います。
SELECT 15 - 7 AS difference;
出力例
+------------+
| difference |
+------------+
| 8 |
+------------+
このクエリは15から7を引き、その結果をdifferenceというラベルで出力します。
これがMySQLで減算を行う最もシンプルな方法です。‘-‘演算子は、数値を直接引く場合にも、テーブルの異なるカラムに格納された数値を引く場合にも使用できます。
カラムの減算
MySQLテーブルの2つのカラムを減算する例として、revenueとexpensesというカラムを持つfinancialsという名前のテーブルを考えてみましょう。
SELECT revenue, expenses, (revenue - expenses) AS net_income FROM financials;
出力例:
+---------+----------+------------+
| revenue | expenses | net_income |
+---------+----------+------------+
| 10000 | 7000 | 3000 |
| 15000 | 12000 | 3000 |
+---------+----------+------------+
このクエリは、revenueからexpensesを引いて純利益を計算します。
セクション2: 日付の扱い
日付の減算
MySQLでは、日付の減算を使って2つの日付間の日数などの期間を計算できます。そのために、MySQLにはDATEDIFF()関数が用意されています。
SELECT DATEDIFF('2023-12-31', '2023-01-01') AS days_difference;
出力例:
+-----------------+
| days_difference |
+-----------------+
| 364 |
+-----------------+
DATEDIFF()は2つの日付間の日数を返します。財務や人事の計算で特に便利です。
時間間隔の減算
MySQLでは、DATE_SUB()関数を使って日付から特定の時間間隔を引くことができます。特定の日付から30日を引くには次のようにします。
SELECT DATE_SUB('2023-12-31', INTERVAL 30 DAY) AS new_date;
出力例:
+------------+
| new_date |
+------------+
| 2023-12-01 |
+------------+
セクション3: 高度な減算テクニック
累計の計算
減算を含む累計計算を示すために、id、date、amountのカラムを持つtransactionsという名前の台帳テーブルがあると仮定します。
SET @running_total := 0;
SELECT
id,
date,
amount,
(@running_total := @running_total - amount) AS running_total
FROM transactions
ORDER BY date;
出力例:
+----+------------+--------+---------------+
| id | date | amount | running_total |
+----+------------+--------+---------------+
| 1 | 2023-01-01 | 500 | -500 |
| 2 | 2023-01-02 | 150 | -650 |
+----+------------+--------+---------------+
このクエリはセッション変数を使って累計を保持し、各取引金額を順番に引いていきます。
NULL値を含むMySQLの減算
MySQLはNULLを不明な値として扱うことに注意してください。減算にNULLが含まれると、結果もNULLになります。この問題を解決するには、COALESCE関数を使用します。
SELECT COALESCE(column1, 0) - COALESCE(column2, 0) AS 'result' FROM table_name;
column1またはcolumn2にNULLが含まれる場合、COALESCE関数はそれを‘0’として扱うため、減算でも正確な結果を返せます。
まとめ
SQLでは、すべての演算が見た目ほど単純とは限らず、減算もその一つです。数値、カラム、日付の値を引くのか、より高度な計算を行うのかによって、最適なアプローチは異なります。
これらのシナリオを自分で練習し、他のテーブルやカラム名でも試してみてください。
探求と学習を続けましょう!
より複雑なクエリや実践的な活用については、MySQLの充実したドキュメントと機能をさらに調べてみてください。
Beekeeper Studioは無料&オープンソースのMySQL GUIです
最近MySQLの作業にBeekeeper Studioを使っていますが、すぐにお気に入りのデータベースツールの1つになりました。インターフェースはすっきりとモダンで、余計なものがなく、他のツールのようなごちゃごちゃした画面に煩わされずにクエリに集中できます。 - Surendra Singh
Beekeeper Studioは高速で直感的、使いやすいMySQLクライアントです。他にも多数のデータベースをサポートしており、Windows、Mac、Linuxで快適に動作します。
MySQLユーザーによるBeekeeper Studioの評価
長年phpMyAdminを使った後にこのプログラムを選びました。より高品質な世界に足を踏み入れたような感覚で、ユーザーのことを本当に大切に考えてくれていると心から感じました。コンセプトそのもの、実装、実際の使い心地、そのすべてについてMatthewに心から感謝しています。
素晴らしいツールです。PostgresとMySQLのDB管理において、これまでで最も実用的なIDEです。面倒なことなく、とにかくちゃんと動きます :-)