MIN, MAX, dan Agregasi Non-Numerik
Agregasikan tanggal dan string, serta pahami arti MIN pada teks.
MIN, MAX, dan Agregasi Non-Numerik adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
MIN dan MAX Tidak Hanya untuk Angka
Kandidat mengira MIN dan MAX hanya berfungsi pada angka. Pewawancara senang bertanya: "Apa yang dikembalikan oleh MAX(name)? Bagaimana dengan MIN(order_date)?"
Kenyataannya, MIN dan MAX berfungsi pada tipe apa pun yang dapat diurutkan — angka, tanggal, dan teks. Memahami aturan pengurutan untuk setiap tipe adalah keterampilan yang sebenarnya sedang diuji.
Kasus Numerik
Mari mulai dari hal yang sudah lazim. Pada kolom numerik, MIN mengembalikan nilai terkecil dan MAX mengembalikan nilai terbesar. Sederhana.
Seperti agregat lainnya, MIN dan MAX mengabaikan NULL. NULL tidak pernah menjadi nilai minimum atau maksimum; NULL hanya dilewati. Jika semua nilai adalah NULL, keduanya mengembalikan NULL.
SELECT MIN(salary) AS lowest, MAX(salary) AS highest
FROM employees;MIN dan MAX pada Tanggal
Tanggal dan stempel waktu dapat diurutkan sepenuhnya, sehingga MIN(order_date) menghasilkan tanggal paling awal dan MAX(order_date) menghasilkan tanggal paling akhir.
Dengan cara ini, Anda dapat menjawab "kapan pesanan pertama dibuat?" (MIN) dan "kapan aktivitas terbaru terjadi?" (MAX) tanpa mengurutkan dan membatasi hasil. Inilah solusi idiomatis berbasis himpunan.
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS latest_order
FROM orders;Rentang Tanggal dalam Satu Kueri
Pertanyaan lanjutan yang umum: "Sudah berapa lama pelanggan ini aktif?" Gabungkan MIN dan MAX, lalu kurangkan.
Ini menghitung rentang antara pesanan pertama dan terakhir. Sintaks pengurangan yang tepat berbeda-beda menurut dialek, tetapi gagasan MIN/MAX berlaku secara universal dan menunjukkan bahwa Anda dapat menyatakan rentang secara deklaratif.
SELECT
customer_id,
MIN(order_date) AS first_order,
MAX(order_date) AS last_order,
MAX(order_date) - MIN(order_date) AS active_days
FROM orders
GROUP BY customer_id;MIN dan MAX pada Teks
Inilah bagian yang mengejutkan banyak orang. Pada kolom teks, MIN dan MAX menggunakan pengurutan leksikografis (berdasarkan abjad) sesuai dengan kolasi kolom tersebut.
Jadi, MIN(name) menghasilkan nama yang berada paling awal menurut abjad, sedangkan MAX(name) menghasilkan nama yang berada paling akhir. MIN pada {'Carol', 'Alice', 'Bob'} menghasilkan 'Alice'; MAX menghasilkan 'Carol'.
SELECT MIN(name) AS first_alpha, MAX(name) AS last_alpha
FROM employees;
-- with Alice, Bob, Carol: 'Alice' and 'Carol'Kolasi dan Kepekaan Huruf Besar-Kecil
Pengurutan teks bergantung pada kolasi, yang mengatur kepekaan huruf besar-kecil dan aturan lokal. Dalam banyak kolasi bawaan, huruf besar dapat diurutkan sebelum huruf kecil, sehingga MAX dari {'apple', 'Banana'} mungkin mengejutkan Anda.
Dalam wawancara, sebutkan bahwa hasil MIN/MAX pada teks bergantung pada kolasi. Nuansa ini membedakan jawaban yang dihafalkan dari pemahaman yang benar-benar mendalam.
Yang NOT Berarti MIN(text)
Kesalahpahaman yang sering terjadi adalah bahwa MIN(name) menghasilkan teks terpendek atau MAX(name) menghasilkan teks terpanjang. Itu tidak benar. MIN/MAX sepenuhnya berkaitan dengan urutan pengurutan, bukan panjang.
Jika Anda benar-benar memerlukan teks terpanjang, urutkan berdasarkan LENGTH(name) dan ambil baris teratas, atau gunakan MAX(LENGTH(name)) untuk mendapatkan panjangnya saja. Jangan mencampuradukkan pengurutan berdasarkan nilai dengan panjang.
SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;MIN/MAX Tidak Menggabungkan Kolom
Jebakan penting: MIN dan MAX bekerja pada satu kolom secara terpisah. Keduanya tidak mengembalikan seluruh baris yang berisi nilai minimum atau maksimum.
Jika Anda menulis SELECT MIN(salary), name tanpa pengelompokan, Anda tidak mendapatkan nama penerima gaji terendah — Anda mendapatkan kesalahan atau nama sembarang, bergantung pada dialeknya. Untuk mengambil seluruh baris, gunakan ORDER BY + LIMIT atau fungsi jendela.
-- Wrong assumption: this does NOT give the lowest earner's name.
-- Correct approach to get the whole row:
SELECT name, salary
FROM employees
ORDER BY salary ASC
LIMIT 1;Ringkasan Perilaku NULL pada MIN/MAX
Sama seperti SUM dan AVG, MIN dan MAX melewati NULL. NULL bukan nilai terkecil maupun terbesar.
- Nilai campuran + NULL: NULL diabaikan, lalu min/max nyata dikembalikan.
- Semua nilai NULL atau tidak ada baris: MIN dan MAX mengembalikan NULL.
Konsistensi antaragregat ini merupakan poin yang baik untuk disampaikan: "Semua agregat standar mengabaikan NULL."
Menerapkannya dalam Grup
MIN dan MAX sangat berguna bersama GROUP BY untuk mencari nilai ekstrem per grup. "Gaji tertinggi per departemen" adalah contoh klasik.
Ini mengembalikan satu baris per departemen dengan gaji tertinggi departemen tersebut. Ingat: hasilnya adalah nilainya, bukan karyawannya. Memasangkan nama karyawan dengan nilai tersebut merupakan masalah lanjutan yang terpisah dan umum.
SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;Cara Menjawab dengan Percaya Diri
Jawaban wawancara yang kuat: "MIN dan MAX bekerja pada jenis data apa pun yang dapat diurutkan. Untuk angka, hasilnya adalah yang terkecil/terbesar; untuk tanggal, yang paling awal/paling akhir; sedangkan untuk teks, urutannya berdasarkan abjad sesuai kolasi kolom. Keduanya mengabaikan NULL dan hanya mengembalikan NULL jika tidak ada nilai non-NULL. Keduanya mengembalikan satu nilai, bukan seluruh baris, jadi untuk mengambil barisnya saya akan menggunakan ORDER BY dengan LIMIT atau fungsi jendela."
Pemeriksaan Singkat
Analisis agregasi teks.
Rangkuman
Segala hal tentang MIN dan MAX:
- Bekerja pada jenis data apa pun yang dapat diurutkan: angka, tanggal, dan teks.
- Teks menggunakan urutan berdasarkan abjad/kolasi, bukan panjang.
- Tanggal: MIN = paling awal, MAX = paling akhir.
- Keduanya mengabaikan NULL; jika semua nilainya NULL atau tidak ada baris, hasilnya NULL.
- Keduanya mengembalikan nilai, bukan seluruh baris — gunakan ORDER BY + LIMIT untuk mengambilnya.
Selanjutnya: apa yang terjadi ketika Anda menggunakan agregat tanpa GROUP BY.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “MIN, MAX, dan Agregasi Non-Numerik” gratis?
Ya — teks lengkap “MIN, MAX, dan Agregasi Non-Numerik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “MIN, MAX, dan Agregasi Non-Numerik”?
Agregasikan tanggal dan string, serta pahami arti MIN pada teks. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “MIN, MAX, dan Agregasi Non-Numerik” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)
- SUM dan AVG dengan NULL
- MIN, MAX, dan Agregasi Non-Numerik
- Agregat Tanpa GROUP BY