Mengurangkan Nilai Numerik
Mengurangkan nilai numerik di SQL itu mudah. Operator - digunakan untuk pengurangan, sama seperti di bahasa pemrograman lainnya.
Mengurangkan Kolom dalam Tabel
Misalkan Anda punya tabel bernama sales yang menyimpan angka penjualan aktual dan proyeksi:
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);
Untuk menghitung selisih antara penjualan aktual dan proyeksi, Anda bisa menulis query berikut:
SELECT
id,
actual_sales,
projected_sales,
actual_sales - projected_sales AS difference
FROM
sales;
Hasil yang Diharapkan:
+----+--------------+-----------------+------------+
| 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)
Mengurangkan Tanggal di SQL
SQL juga memungkinkan Anda mengurangkan tanggal untuk mencari selisih dalam hari, bulan, atau tahun, tergantung sistem database yang Anda gunakan.
Mengurangkan Tanggal di MySQL
Perhatikan tabel employees dengan kolom start_date dan 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');
Untuk menghitung selisih hari antara end_date dan start_date, Anda bisa menggunakan fungsi DATEDIFF:
SELECT
id,
start_date,
end_date,
DATEDIFF(end_date, start_date) AS days_difference
FROM
employees;
Hasil yang Diharapkan:
+----+------------+------------+-----------------+
| 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)
Mengurangkan Timestamp
Mengurangkan timestamp berguna saat Anda perlu menghitung selisih waktu dalam detik, menit, jam, dan seterusnya.
Mengurangkan Timestamp di PostgreSQL
Misalkan Anda punya tabel logs yang menyimpan timestamp kapan sebuah event dimulai dan berakhir:
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');
Untuk menghitung selisih jam antara end_time dan start_time, Anda bisa menggunakan fungsi EXTRACT:
SELECT
id,
start_time,
end_time,
EXTRACT(EPOCH FROM end_time - start_time) / 3600 AS hours_difference
FROM
logs;
Hasil yang Diharapkan:
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
Mengurangkan Antar Baris
Dalam beberapa kasus, Anda mungkin ingin mengurangkan nilai antar baris yang berbeda. Ini biasanya dilakukan dengan window function.
Mari gunakan tabel monthly_sales untuk menghitung selisih penjualan dari satu bulan ke bulan berikutnya:
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);
Untuk menghitung selisih penjualan bulan ke bulan, Anda bisa menggunakan fungsi LAG:
SELECT
month,
total_sales,
total_sales - LAG(total_sales) OVER (ORDER BY month) AS sales_difference
FROM
monthly_sales;
Hasil yang Diharapkan:
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
Kesimpulan
Pengurangan di SQL adalah operasi serbaguna yang bisa Anda terapkan pada angka, tanggal, timestamp, bahkan antar baris. Meskipun sintaksnya berbeda di tiap database SQL, operasi dasarnya tetap sama. Kuncinya adalah memahami perbedaan-perbedaan kecil tersebut.
Artikel lain yang mungkin Anda suka:
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna tentang Beekeeper Studio
"Beekeeper Studio benar-benar menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."