🧚 Hör mal! Beekeeper Studio ist eine schnelle, moderne Open-Source-Datenbank-GUI Download
23. August 2024 Von Matthew Rathbone

Numerische Werte subtrahieren

Numerische Werte in SQL zu subtrahieren ist ganz einfach. Für die Subtraktion verwendest du den Operator -, genau wie in anderen Programmiersprachen.

Spalten einer Tabelle subtrahieren

Angenommen, du hast eine Tabelle namens sales, in der die tatsächlichen und die prognostizierten Verkaufszahlen gespeichert sind:

CREATE TABLE sales (
    id INT PRIMARY KEY,
    actual_sales DECIMAL(10, 2),
    projected_sales DECIMAL(10, 2)
);

INSERT INTO sales (id, actual_sales, projected_sales)
VALUES
(1, 1000.00, 1200.00),
(2, 1500.00, 1500.00),
(3, 1300.00, 1250.00);

Um die Differenz zwischen tatsächlichen und prognostizierten Verkäufen zu berechnen, kannst du folgende Abfrage schreiben:

SELECT 
    id,
    actual_sales,
    projected_sales,
    actual_sales - projected_sales AS difference
FROM 
    sales;

Erwartete Ausgabe:

+----+--------------+-----------------+------------+
| id | actual_sales | projected_sales | difference |
+----+--------------+-----------------+------------+
|  1 |      1000.00 |         1200.00 |    -200.00 |
|  2 |      1500.00 |         1500.00 |       0.00 |
|  3 |      1300.00 |         1250.00 |      50.00 |
+----+--------------+-----------------+------------+
3 rows in set (0.00 sec)

Datumswerte in SQL subtrahieren

In SQL kannst du auch Datumswerte subtrahieren, um die Differenz in Tagen, Monaten oder Jahren zu ermitteln – je nachdem, welches Datenbanksystem du verwendest.

Datumswerte in MySQL subtrahieren

Nehmen wir eine Tabelle employees mit den Spalten start_date und end_date:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    start_date DATE,
    end_date DATE
);

INSERT INTO employees (id, start_date, end_date)
VALUES
(1, '2023-01-01', '2023-08-01'),
(2, '2022-05-15', '2023-05-15'),
(3, '2023-03-01', '2023-03-31');

Um die Differenz in Tagen zwischen end_date und start_date zu berechnen, kannst du die Funktion DATEDIFF verwenden:

SELECT 
    id,
    start_date,
    end_date,
    DATEDIFF(end_date, start_date) AS days_difference
FROM 
    employees;

Erwartete Ausgabe:

+----+------------+------------+-----------------+
| id | start_date | end_date   | days_difference |
+----+------------+------------+-----------------+
|  1 | 2023-01-01 | 2023-08-01 |             212 |
|  2 | 2022-05-15 | 2023-05-15 |             365 |
|  3 | 2023-03-01 | 2023-03-31 |              30 |
+----+------------+------------+-----------------+
3 rows in set (0.01 sec)

Timestamps subtrahieren

Timestamps zu subtrahieren ist praktisch, wenn du Zeitdifferenzen in Sekunden, Minuten, Stunden usw. berechnen musst.

Timestamps in PostgreSQL subtrahieren

Angenommen, du hast eine Tabelle logs, in der Timestamps für Beginn und Ende eines Ereignisses gespeichert sind:

CREATE TABLE logs (
    id SERIAL PRIMARY KEY,
    start_time TIMESTAMP,
    end_time TIMESTAMP
);

INSERT INTO logs (start_time, end_time)
VALUES
('2023-08-01 10:00:00', '2023-08-01 12:00:00'),
('2023-08-02 09:15:00', '2023-08-02 10:45:00');

Um die Differenz in Stunden zwischen end_time und start_time zu berechnen, kannst du die Funktion EXTRACT verwenden:

SELECT 
    id,
    start_time,
    end_time,
    EXTRACT(EPOCH FROM end_time - start_time) / 3600 AS hours_difference
FROM 
    logs;

Erwartete Ausgabe:

id |     start_time      |      end_time       |  hours_difference
----+---------------------+---------------------+--------------------
  1 | 2023-08-01 10:00:00 | 2023-08-01 12:00:00 | 2.00
  2 | 2023-08-02 09:15:00 | 2023-08-02 10:45:00 | 1.50
(2 rows)

Time: 9.567 ms

Über Zeilen hinweg subtrahieren

Manchmal möchtest du Werte aus verschiedenen Zeilen voneinander subtrahieren. Dafür nutzt man üblicherweise Window Functions.

Nehmen wir eine Tabelle monthly_sales, um die Umsatzdifferenz von einem Monat zum nächsten zu berechnen:

CREATE TABLE monthly_sales (
    month DATE PRIMARY KEY,
    total_sales DECIMAL(10, 2)
);

INSERT INTO monthly_sales (month, total_sales)
VALUES
('2023-01-01', 2000.00),
('2023-02-01', 2200.00),
('2023-03-01', 2100.00);

Um die Umsatzdifferenz zum Vormonat zu berechnen, kannst du die Funktion LAG verwenden:

SELECT 
    month,
    total_sales,
    total_sales - LAG(total_sales) OVER (ORDER BY month) AS sales_difference
FROM 
    monthly_sales;

Erwartete Ausgabe:

   month    | total_sales | sales_difference
------------+-------------+------------------
 2023-01-01 |     2000.00 |           [NULL]
 2023-02-01 |     2200.00 |           200.00
 2023-03-01 |     2100.00 |          -100.00
(3 rows)

Time: 5.648 ms

Fazit

Subtraktion in SQL ist eine vielseitige Operation, die du auf Zahlen, Datumswerte, Timestamps und sogar über Zeilen hinweg anwenden kannst. Auch wenn sich die Syntax zwischen SQL-Datenbanken unterscheidet, bleibt die grundlegende Operation gleich. Entscheidend ist, dass du dich mit diesen Feinheiten vertraut machst.

Weitere Artikel, die dir gefallen könnten:

Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI

Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.

Die Linux-Version von Beekeeper hat 100% des Funktionsumfangs, ohne Abstriche und ohne Kompromisse.

Was Nutzer über Beekeeper Studio sagen

★★★★★
„Beekeeper Studio hat meinen alten SQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder zum Vergnügen.“
— Alex K., Datenbankentwickler
★★★★★
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft genau die richtige Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“
— Sarah M., Full Stack Engineer

Bereit für einen besseren SQL-Workflow?

download Kostenlos herunterladen