MySQL - ROLLUP: Menguasai Agregasi Data

Halo teman-teman pecinta MySQL! Hari ini, kita akan mengemban sebuah perjalanan menarik ke dunia agregasi data dengan klausa ROLLUP. Sebagai guru komputer tetangga yang ramah, saya di sini untuk mengarahkan Anda langkah demi langkah dalam topik ini. Jangan khawatir jika Anda baru belajar programming – kita akan mulai dari dasar dan kemudian naik tingkat. Jadi, ambillah secangkir kopi (atau teh, jika itu hal yang Anda suka), dan mari kita masuk ke dalam!

MySQL - ROLLUP

Klausa ROLLUP MySQL: Teman Baru Anda dalam Analisis Data

Apa Itu ROLLUP?

Bayangkan Anda sedang merencanakan sebuah pesta reuni keluarga besar. Anda memiliki daftar semua jenis makanan, kuantitasnya, dan harga. Bagaimana jika Anda dapat dengan cepat melihat total biaya untuk setiap kategori makanan, serta total keseluruhan untuk semua item? Itu tepatnya apa yang dilakukan ROLLUP di MySQL – itu membantu Anda membuat baris ringkasan pada level yang berbeda dari data Anda.

ROLLUP adalah ekstensi dari klausa GROUP BY. Itu memungkinkan Anda untuk menghasilkan beberapa level subtotal dan total keseluruhan dalam satu query. Sangat menarik, kan?

Sintaks Dasar

Berikut adalah struktur dasar query yang menggunakan ROLLUP:

SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ... WITH ROLLUP;

Marilah kitauraikan ini dengan contoh sederhana. Bayangkan kita memiliki tabel bernama picnic_items:

CREATE TABLE picnic_items (
item_name VARCHAR(50),
category VARCHAR(50),
quantity INT,
price DECIMAL(10, 2)
);

INSERT INTO picnic_items VALUES
('Sandwich', 'Food', 20, 5.99),
('Soda', 'Drink', 30, 1.99),
('Chips', 'Snack', 15, 2.50),
('Water', 'Drink', 40, 0.99),
('Cookies', 'Snack', 25, 3.50);

Sekarang, mari kita gunakan ROLLUP untuk mendapatkan ringkasan biaya pesta reuni kita:

SELECT category, SUM(quantity * price) AS total_cost
FROM picnic_items
GROUP BY category WITH ROLLUP;

Hasilnya mungkin terlihat seperti ini:

+----------+------------+
| category | total_cost |
+----------+------------+
| Drink    |     159.60 |
| Food     |     119.80 |
| Snack    |     125.00 |
| NULL     |     404.40 |
+----------+------------+

Dalam hasil ini, kita melihat total biaya untuk setiap kategori, dan baris terakhir (dengan NULL di kolom category) memberikan kita total keseluruhan untuk semua kategori kombinasi.

ROLLUP pada Beberapa Kolom: Menyelami Lebih Dalam

Sekarang kita telah menguasai dasar-dasar, mari kita tingkatkan. ROLLUP dapat bekerja pada beberapa kolom, menciptakan hierarki subtotal. Itu seperti mengatur item pesta reuni Anda menurut kategori, kemudian menurut item spesifik, dan mendapatkan total pada setiap level.

Marilah kita ubah query kita untuk mengelompokkan berdasarkan keduanya category dan item_name:

SELECT category, item_name, SUM(quantity * price) AS total_cost
FROM picnic_items
GROUP BY category, item_name WITH ROLLUP;

Query ini mungkin menghasilkan hasil seperti ini:

+----------+------------+------------+
| category | item_name  | total_cost |
+----------+------------+------------+
| Drink    | Soda       |      59.70 |
| Drink    | Water      |      39.60 |
| Drink    | NULL       |      99.30 |
| Food     | Sandwich   |     119.80 |
| Food     | NULL       |     119.80 |
| Snack    | Chips      |      37.50 |
| Snack    | Cookies    |      87.50 |
| Snack    | NULL       |     125.00 |
| NULL     | NULL       |     344.10 |
+----------+------------+------------+

Ini adalah apa yang terjadi:

  1. Kita mendapatkan total untuk setiap item spesifik dalam setiap kategori.
  2. Kita mendapatkan subtotal untuk setiap kategori (di mana item_name adalah NULL).
  3. Kita mendapatkan total keseluruhan di akhir (di mana keduanya category dan item_name adalah NULL).

Itu seperti memiliki spreadsheet kecil di dalam hasil query database Anda!

ROLLUP Menggunakan Program Klien: Mengintegrasikan Segala Hal

Sekarang, mari kita gunakan keterampilan ROLLUP kita dalam sebuah konteks yang lebih realistis. Bayangkan Anda sedang mengembangkan sebuah sistem manajemen inventori untuk sebuah toko kecil. Anda ingin membuat laporan yang menunjukkan penjualan menurut departemen, produk, dan kemudian memberikan total keseluruhan.

Pertama-tama, mari kita buat tabel dan masukkan beberapa data contoh:

CREATE TABLE sales (
department VARCHAR(50),
product VARCHAR(50),
quarter INT,
revenue DECIMAL(10, 2)
);

INSERT INTO sales VALUES
('Electronics', 'Laptop', 1, 1200.00),
('Electronics', 'Smartphone', 1, 800.00),
('Electronics', 'Laptop', 2, 1500.00),
('Clothing', 'T-Shirt', 1, 200.00),
('Clothing', 'Jeans', 2, 500.00),
('Grocery', 'Bread', 1, 50.00),
('Grocery', 'Milk', 1, 30.00),
('Grocery', 'Eggs', 2, 40.00);

Sekarang, mari kita buat laporan komprehensif menggunakan ROLLUP:

SELECT
IFNULL(department, 'Total') AS department,
IFNULL(product, 'Subtotal') AS product,
IFNULL(quarter, 'All Quarters') AS quarter,
SUM(revenue) AS total_revenue
FROM
sales
GROUP BY
department, product, quarter WITH ROLLUP;

Query ini akan menghasilkan laporan detil dengan subtotal pada setiap level. Fungsi IFNULL digunakan untuk mengganti nilai NULL dengan label yang lebih bermakna.

Berikut adalah penjelasan apa yang dilakukan query ini:

  1. Itu mengelompokkan data menurut departemen, produk, dan kuartal.
  2. Itu menghitung total pendapatan untuk setiap kombinasi.
  3. Itu menggunakan ROLLUP untuk membuat subtotal pada setiap level.
  4. Itu mengganti nilai NULL dengan label deskriptif untuk kebacaan yang lebih baik.

Hasilnya mungkin terlihat seperti ini:

+-------------+------------+--------------+---------------+
| department  | product    | quarter      | total_revenue |
+-------------+------------+--------------+---------------+
| Clothing    | Jeans      | 2            |        500.00 |
| Clothing    | Jeans      | All Quarters |        500.00 |
| Clothing    | T-Shirt    | 1            |        200.00 |
| Clothing    | T-Shirt    | All Quarters |        200.00 |
| Clothing    | Subtotal   | All Quarters |        700.00 |
| Electronics | Laptop     | 1            |       1200.00 |
| Electronics | Laptop     | 2            |       1500.00 |
| Electronics | Laptop     | All Quarters |       2700.00 |
| Electronics | Smartphone | 1            |        800.00 |
| Electronics | Smartphone | All Quarters |        800.00 |
| Electronics | Subtotal   | All Quarters |       3500.00 |
| Grocery     | Bread      | 1            |         50.00 |
| Grocery     | Bread      | All Quarters |         50.00 |
| Grocery     | Eggs       | 2            |         40.00 |
| Grocery     | Eggs       | All Quarters |         40.00 |
| Grocery     | Milk       | 1            |         30.00 |
| Grocery     | Milk       | All Quarters |         30.00 |
| Grocery     | Subtotal   | All Quarters |        120.00 |
| Total       | Subtotal   | All Quarters |       4320.00 |
+-------------+------------+--------------+---------------+

Hasil ini memberikan kita pandangan komprehensif tentang data penjualan kita, dengan subtotal untuk setiap produk, setiap departemen, dan total keseluruhan di akhir.

Metode ROLLUP yang Berguna

Berikut adalah tabel yang menyajikan beberapa metode yang berguna saat bekerja dengan ROLLUP:

Metode Deskripsi
WITH ROLLUP Digunakan dengan GROUP BY untuk menghasilkan subtotal dan total keseluruhan
IFNULL() Mengganti nilai NULL dengan nilai yang ditentukan
GROUPING() Mengembalikan 1 untuk nilai NULL yang diproduksi oleh ROLLUP, 0 jika tidak
COALESCE() Mengembalikan nilai pertama yang bukan NULL dalam daftar

Ingat, latihan membuat sempurna! Cobalah membuat tabel Anda sendiri dan eksperimen dengan query ROLLUP. Itu adalah alat yang kuat dan dapat memberikan wawasan berharga tentang data Anda.

Dan begitu saja, teman-teman! Anda telah meningkatkan keterampilan MySQL Anda dengan klausa ROLLUP. Dari ringkasan sederhana ke laporan hierarki kompleks, ROLLUP telah memberikan Anda dukungan. Terus eksplorasi, terus coding, dan terutama, terus bersenang-senang dengan data!

Credits: Image by storyset