MySQL - klausa HAVING

Hai there, para penggemar basis data yang ambisius! Hari ini, kita akan mendalami salah satu fitur yang kuat MySQL: klausa HAVING. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk memandu Anda dalam perjalanan ini. Jangan khawatir jika Anda baru belajar pemrograman; kita akan mengambil langkah-langkah perlahan-lahan, dan segera Anda akan dapat menyaring data seperti seorang ahli!

MySQL - Having Clause

Klausa HAVING MySQL

mari kita mulai dari dasar. Klausa HAVING mirip seperti seorang pengawas di klub, tetapi bukan untuk memeriksa KTP, melainkan untuk memeriksa kelompok data. Itu digunakan bersama klausa GROUP BY untuk menyaring catatan yang dikelompokkan yang memenuhi syarat tertentu.

Bayangkan Anda menata koleksi buku komik Anda. Anda telah mengelompokkannya berdasarkan superhero, tapi sekarang Anda hanya ingin melihat pahlawan yang muncul di lebih dari lima komik. Itu tempat klausa HAVING berperan!

Berikut adalah sintaksis dasar:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

mari kita lihat contoh sederhana. Misalnya kita memiliki tabel yang disebut employees:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 10;

Query ini akan menampilkan semua departemen dengan lebih dari 10 karyawan. Klausa HAVING memeriksa employee_count setelah pengelompokan telah dilakukan.

Kapan menggunakan WHERE vs HAVING

Anda mungkin berpikir, "Tunggu sebentar, pak! Bukan ini apa yang WHERE lakukan?" Pertanyaan bagus! Berikut adalah perbedaan utama:

  • WHERE menyaring baris individual sebelum pengelompokan
  • HAVING menyaring kelompok setelah pengelompokan

Pertimbangkan WHERE sebagai pemeriksaan keamanan awal, dan HAVING sebagai daftar VIP di pesta setelah acara!

Klausa HAVING dengan klausa ORDER BY

Sekarang, mari kita menambahkan beberapa urutan ke hasil kami. Klausa ORDER BY mirip seperti petugas di teater, memastikan bahwa semua orang berada di kursi yang benar.

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 50000
ORDER BY avg_salary DESC;

Query ini akan menampilkan departemen dengan rata-rata gaji lebih dari $50,000, diurutkan dari yang tertinggi ke yang terendah. Itu seperti membuat daftar "penderita tinggi" untuk perusahaan Anda!

Klausa HAVING dengan fungsi COUNT()

Fungsi COUNT() adalah kalkulator yang dapat Anda percaya. mari kita gunakan itu untuk menemukan manajer yang sibuk:

SELECT manager_id, COUNT(*) as team_size
FROM employees
GROUP BY manager_id
HAVING team_size > 5
ORDER BY team_size DESC;

Query ini mencantumkan manajer yang memiliki lebih dari 5 anggota tim. Itu seperti mengetahui guru yang memiliki kelas terbesar!

Klausa HAVING dengan fungsi AVG()

AVG() adalah kalkulator rata-rata yang ramah. mari kita gunakan itu untuk menemukan kategori produk yang berprestasi tinggi:

SELECT category, AVG(price) as avg_price
FROM products
GROUP BY category
HAVING avg_price > 100
ORDER BY avg_price DESC;

Query ini menampilkan kategori produk dengan harga rata-rata lebih dari $100. Itu seperti mengidentifikasi bagian mewah di toko departemen!

Klausa HAVING dengan fungsi MAX()

MAX() seperti juara lompat tinggi di data Anda. mari kita gunakan itu untuk menemukan produk termahal di setiap kategori:

SELECT category, MAX(price) as max_price
FROM products
GROUP BY category
HAVING max_price > 1000
ORDER BY max_price DESC;

Query ini mencantumkan kategori yang memiliki setidaknya satu produk dengan harga lebih dari $1000. Itu seperti menemukan item "tiket besar" di setiap departemen!

Klausa HAVING menggunakan Program Klien

Sekarang, mari kita praktikkan semua ini menggunakan program klien MySQL. mari kita gunakan contoh klasik basis data toko buku:

-- Buat tabel buku
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(50),
genre VARCHAR(50),
price DECIMAL(5,2),
sold INT
);

-- Masukkan beberapa data contoh
INSERT INTO books (title, author, genre, price, sold) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 'Classic', 12.99, 1000),
('To Kill a Mockingbird', 'Harper Lee', 'Classic', 14.99, 1500),
('1984', 'George Orwell', 'Sci-Fi', 11.99, 2000),
('Pride and Prejudice', 'Jane Austen', 'Romance', 9.99, 1800),
('The Hobbit', 'J.R.R. Tolkien', 'Fantasy', 19.99, 2500),
('Harry Potter', 'J.K. Rowling', 'Fantasy', 24.99, 5000),
('The Catcher in the Rye', 'J.D. Salinger', 'Classic', 13.99, 1200);

-- Sekarang mari kita gunakan HAVING untuk menganalisis penjualan buku kita
SELECT genre, AVG(price) as avg_price, SUM(sold) as total_sold
FROM books
GROUP BY genre
HAVING total_sold > 2000
ORDER BY total_sold DESC;

Query ini akan menampilkan genre yang menjual lebih dari 2000 buku secara total, bersama dengan harga rata-rata mereka. Itu seperti menemukan bagian terlaris di toko buku kita!

Berikut adalah penjelasan singkat apa yang terjadi:

  1. Kita memilih genre, menghitung harga rata-rata, dan menjumlahkan penjualan total.
  2. Kita kelompokkan hasilnya berdasarkan genre.
  3. Klausa HAVING menyaring kelompok yang memiliki penjualan total 2000 atau kurang.
  4. Akhirnya, kita urutkan hasilnya berdasarkan penjualan total dalam urutan menurun.

Dan itu adalah! Anda telah menggunakan klausa HAVING untuk memperoleh wawasan nilai dari data Anda. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba query Anda sendiri.

Berikut adalah tabel rujukan cepat dari fungsi yang kita gunakan dengan HAVING:

Fungsi Deskripsi Contoh
COUNT() Menghitung jumlah baris dalam kelompok HAVING COUNT(*) > 5
AVG() Menghitung rata-rata dari set nilai HAVING AVG(price) > 100
MAX() Mengembalikan nilai maksimum dalam set HAVING MAX(price) > 1000
SUM() Menghitung jumlah dari set nilai HAVING SUM(sold) > 2000

Selamat mencari, para ahli data masa depan!

Credits: Image by storyset