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.
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.“
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper trifft genau die richtige Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“