MySQL - ROLLUP: Menjawar Data Agregat

Hai teman-teman yang bersemangat dalam MySQL! Hari ini, kita akan melangsungkan sebuah perjalanan menarik ke dalam dunia agregasi data dengan klausa ROLLUP. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya di sini untuk mengarahkan Anda secara langkah demi langkah dalam topik ini. Jangan khawatir jika Anda baru dalam pemrograman - kita akan mulai dari dasar dan naik turun. Jadi, ambil secangkir kopi (atau teh, jika itu hal yang Anda sukai), dan mari kita masuk ke dalamnya!

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. Apakah tidak akan menyenangkan jika Anda dapat dengan cepat melihat total biaya untuk setiap kategori makanan, serta total keseluruhan untuk semuanya? Itu tepat apa yang dilakukan ROLLUP di MySQL - itu membantu Anda membuat baris ringkasan di berbagai tingkat data Anda.

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

Sintaksis Dasar

Ini adalah struktur dasar dari query yang menggunakan ROLLUP:

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

mari kitauraikan ini dengan contoh sederhana. Bayangkan kita memiliki tabel yang disebut 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 picnic kita:

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

Hasilnya mungkin tampak 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: Menyelam Lebih Dalam

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

Mari kita modifikasi query kita untuk mengelompokkan berdasarkan kategori 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 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 sebuah spreadsheet mini di dalam hasil query database Anda!

ROLLUP Menggunakan Program Klien: Menggabungkan Semua

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

Pertama-tama, mari kita buat tabel kita 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 di setiap level. Fungsi IFNULL digunakan untuk mengganti nilai NULL dengan label yang lebih menarik.

Ini adalah penjelasan tentang apa yang dilakukan query ini:

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

Hasilnya mungkin tampak 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 menggabungkan 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 yang dapat memberikan wawasan nilai ke 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 cover. Terus eksplorasi, terus kode, dan yang paling penting, terus bersenang-senang dengan data!

Credits: Image by storyset