🧚 お知らせ!Beekeeper Studioは高速でモダンなオープンソースのPostgreSQL GUIです ダウンロード
2024年8月7日 著者: Matthew Rathbone

PostgreSQLは、さまざまな数値データ型に対して減算(-)を含む基本的な算術演算子をサポートしています。

読み進める前に、モダンで高速なPostgreSQLデータベースマネージャー、Beekeeper Studioをご紹介させてください。オートコンプリート対応のSQLエディタで、ここで紹介する計算をすぐに試せます。PostgreSQLでは無料でお使いいただけます。こちらからダウンロードしてください。

最初の例はシンプルで、2つの整数を減算します。これはPostgreSQLに限らず、すべてのSQLベースのデータベースで動作します。

SELECT 15 - 5 AS result;

期待される出力:

result
10

列の減算

次に、ある列から別の列を減算する方法を見てみましょう。次のような構造を持つ売上テーブル sales を考えます:

id item price discount
1 A 100 20
2 B 200 50

割引適用後の最終価格を求めたいとします。これは価格から割引額を減算することで求められます。

SELECT id, item, price - discount AS Final_Price FROM sales;

期待される出力:

id item final_price
1 A 80
2 B 150

日付の減算

PostgreSQLで日付を減算すると、2つの日付の差が日数で返されます。

次のようなテーブル rentals を考えます:

id item rent_start_date rent_end_date
1 Bike 2022-03-01 2022-03-10
2 Car 2022-02-20 2022-03-02

レンタル期間を計算します:

SELECT id, item, rent_end_date - rent_start_date as rental_duration FROM rentals;

期待される出力:

id item rental_duration
1 Bike 9
2 Car 10

タイムスタンプの減算

PostgreSQLでタイムスタンプを減算すると、2つのタイムスタンプ間のインターバルが得られます。

テーブル logins があるとします:

id login_time logout_time
1 2022-03-15 08:00:00 2022-03-15 10:30:00
2 2022-03-15 07:30:00 2022-03-15 10:00:00

各セッションの時間を計算します:

SELECT id, logout_time - login_time as session_duration FROM logins;

期待される出力:

id session_duration
1 02:30:00
2 02:30:00

実践的なユースケース

在庫管理

総在庫数から販売数を減算して、各商品の利用可能な在庫を計算する例を紹介します。

次のような構造の在庫テーブルがあるとします:

CREATE TABLE inventory (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(255),
    total_stock INT,
    sold INT
);

サンプルデータ:

INSERT INTO inventory (product_name, total_stock, sold) VALUES
('Product A', 100, 50),
('Product B', 200, 180),
('Product C', 150, 140);

クエリ: 利用可能な在庫の計算

SELECT product_id, product_name, total_stock - sold AS available_stock
FROM inventory;

期待される出力:

 product_id | product_name | available_stock 
------------+--------------+-----------------
          1 | Product A    |              50
          2 | Product B    |              20
          3 | Product C    |              10

このクエリでは、total_stock から sold の数量を減算して、各商品の available_stock を求めています。

年齢の計算

PostgreSQLの age 関数は2つの日付の差を計算するために使われ、年・月・日を含む複合的なinterval型として結果を返します。

テーブル内の顧客の年齢を計算したい場合の実践的なユースケースを紹介します。

birthdate列を持つcustomersテーブルがあるとします。

SELECT customer_id, birthdate, age(current_date, birthdate) AS age
FROM customers;

期待される出力:

 customer_id | birthdate  |         age          
-------------+------------+----------------------
           1 | 1990-04-25 | 34 years 3 mons 12 days
           2 | 1985-10-12 | 38 years 9 mons 24 days
           3 | 2000-01-01 | 24 years 7 mons  5 days

まとめ

PostgreSQLの減算は、数値、日付、インターバルに適用できる汎用的なツールです。この記事では、数値と日付の両方を扱うPostgreSQLの減算操作を見てきました。計算を行う際は、常にデータ型を確認し、互換性を確保するようにしてください。より高度なSQLの概念を掘り下げるシリーズの続編もお楽しみに。Happy coding!

こちらの記事もおすすめです:

Beekeeper Studioは無料でオープンソースのPostgreSQL GUIです

まさに探していたPostgreSQLクライアントです!UIが他とは一線を画しています。すっきりしていて直感的、しかも高機能。使いにくいPGAdminとはお別れです。 - David Cyprian

Beekeeper Studioは高速で直感的、使いやすいPostgreSQLクライアントです。他にも多数のデータベースに対応しており、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper StudioのPostgreSQL利用者の声

Jay Simons Jay Simons Designly.biz オーナー

pgAdminと違って、Beekeeperは驚くほどシンプルに使えるのに機能も充実しています。しかも価格も手頃です!データベースのバックアップ機能が特に便利です。本当に素晴らしいソフトウェアです。

Alex M

素晴らしいツールです。PostgresとMySqlのDB管理で、これまで見つけた中で一番実用的なIDEです。面倒なことなく、ちゃんと動きます :-)

PostgreSQLワークフローを改善しませんか?

download 無料でダウンロード