🧚 Dengar! Beekeeper Studio adalah GUI database yang cepat, modern, dan open source Unduh
23 Agustus 2024 Oleh Matthew Rathbone

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.

Versi Linux Beekeeper punya fitur 100% lengkap, tanpa potong kompas, tanpa kompromi fitur.

Apa Kata Pengguna tentang Beekeeper Studio

★★★★★
"Beekeeper Studio benar-benar menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
— Alex K., Database Developer
★★★★★
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."
— Sarah M., Full Stack Engineer

Siap Meningkatkan Workflow SQL Anda?

download Unduh Gratis