Mengira dan Menapis Kumpulan
Cari kumpulan yang memenuhi ambang, iaitu soalan piawai “pelanggan dengan lebih daripada N pesanan”
Mengira dan Menapis Kumpulan ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Soalan Pengumpulan yang Paling Lazim
'Cari pelanggan yang mempunyai lebih daripada N pesanan' ialah masalah temu duga GROUP BY yang lazim. Variasinya sering muncul: produk yang dijual lebih daripada X kali, jabatan yang mempunyai sekurang-kurangnya Y orang pekerja, hari yang mempunyai lebih daripada Z log masuk.
Kesemuanya menggunakan corak yang sama: kumpulkan, kira, kemudian tapis kumpulan dengan HAVING.
Langkah Pertama: Kira Setiap Kumpulan
Mulakan dengan mengira baris dalam setiap kumpulan. Kumpulkan berdasarkan kunci yang mentakrifkan 'pelanggan' atau 'produk', kemudian gunakan COUNT(*).
Ini memberikan satu baris bagi setiap kumpulan bersama saiznya. Anda belum menapis apa-apa; Anda hanya mengukur setiap kumpulan.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;Langkah Kedua: Tapis dengan HAVING
Sekarang kekalkan hanya kumpulan yang memenuhi ambang. Syarat itu berdasarkan nilai agregat, jadi ia mesti berada dalam HAVING, bukan WHERE.
Fahami seperti ini: 'kumpulkan pesanan mengikut pelanggan, kemudian kekalkan pelanggan yang bilangannya melebihi lima.' Ini ialah jawapan lengkap kepada soalan klasik tersebut.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Kira Berbeza berbanding Kira Semua
Perhatikan perkataannya. 'Pelanggan yang memesan lebih daripada 3 produk berbeza' memerlukan COUNT(DISTINCT product_id), bukan COUNT(*).
COUNT(*)mengira baris dalam kumpulan.COUNT(DISTINCT col)mengira nilai unik yang bukan NULL.
Penemu duga menyelitkan perkataan 'berbeza' atau 'unik' dalam soalan untuk menguji sama ada Anda memilih DISTINCT.
SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;Menapis Berdasarkan SUM dan Bukannya COUNT
Struktur yang sama mengendalikan jumlah. 'Pelanggan yang berbelanja lebih daripada 1000 secara keseluruhan' mengumpulkan berdasarkan pelanggan dan menapis menggunakan SUM(amount).
Sebarang nilai agregat boleh menjadi asas syarat HAVING: COUNT, SUM, AVG, MAX, MIN. Mengenal pasti ukuran dalam soalan akan memberitahu Anda nilai agregat yang perlu digunakan untuk penapisan.
SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;Pelbagai Syarat Kumpulan
HAVING boleh menggabungkan syarat dengan AND/OR, termasuk nilai agregat yang berbeza. 'Pelanggan dengan lebih daripada 5 pesanan DAN purata pesanan melebihi 100' ialah satu klausa HAVING.
Setiap syarat merujuk nilai agregatnya sendiri; semuanya dinilai selepas pengumpulan. Ini menunjukkan bahawa Anda boleh menyatakan peraturan perniagaan berkompaun dengan kemas.
SELECT customer_id,
COUNT(*) AS orders,
AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;Gabungkan WHERE dan HAVING
Selalunya Anda perlu menapis baris sebelum mengira. 'Dalam kalangan pesanan dari tahun ini, pelanggan yang mempunyai lebih daripada 5 pesanan' menggunakan WHERE untuk tarikh dan HAVING untuk kiraan.
WHERE mengecilkan baris terlebih dahulu, kemudian pengumpulan dan ambang HAVING digunakan. Menggunakan kedua-dua klausa dengan betul dalam satu pertanyaan menunjukkan tahap pertengahan.
SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;Mencari Pendua
Contoh yang hampir sama: 'cari e-mel pendua.' Kumpulkan berdasarkan lajur yang sepatutnya unik dan kekalkan kumpulan yang bilangannya melebihi satu.
Corak tunggal ini mengesan kunci pendua, transaksi berulang atau sebarang nilai yang muncul lebih banyak daripada sepatutnya. Penemu duga menanyakannya untuk menguji sama ada Anda melihat pengumpulan sebagai alat penyahpenduaan.
SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;Kumpulan yang Mencapai Bilangan Tepat
Ambang tidak semestinya bermaksud 'lebih besar daripada.' 'Pelanggan dengan tepat satu pesanan' menggunakan HAVING COUNT(*) = 1; 'sekurang-kurangnya 3' menggunakan >= 3.
Perhatikan perkataan penentu sempadan dalam soalan: 'lebih daripada', 'sekurang-kurangnya', 'tepat', 'kurang daripada'. Setiap perkataan ini sepadan dengan operator perbandingan yang berbeza, dan penemu duga menguji ketepatan tersebut.
-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;Hanya Memulangkan Kekunci
Kadangkala soalan hanya meminta pengecam yang memenuhi syarat, bukan kiraannya, selalunya untuk digunakan sebagai masukan kepada kueri lain. Anda masih mengelompokkan dan menapis, tetapi SELECT hanya memilih kekunci.
Anda kemudiannya boleh membungkusnya dalam subkueri IN atau cantuman untuk mendapatkan rekod penuh bagi pelanggan tersebut. Mengetahui komposisi ini menunjukkan kemahiran lanjutan.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Panduan Temu Duga
Untuk sebarang soalan tentang kumpulan yang mencapai ambang, huraikan empat langkah ini dengan kuat: (1) kenal pasti kekunci pengumpulan, (2) pilih ukuran agregat, (3) tentukan operator perbandingan berdasarkan perkataan yang digunakan, (4) letakkan penapis baris dalam WHERE dan penapis agregat dalam HAVING.
Templat ini menyelesaikan seluruh kelompok masalah pengiraan dan penapisan.
Semakan Pantas
Pilih kueri yang betul untuk soalan tersebut.
Ringkasan
Corak: kelompokkan berdasarkan kekunci, lakukan agregat, dan tapis kumpulan dengan HAVING. Corak ini menyelesaikan masalah seperti 'lebih daripada N pesanan', pelanggan dengan perbelanjaan tertinggi, pendua, dan pelanggan yang membuat satu pesanan sahaja.
- Gunakan
COUNT(*)untuk baris danCOUNT(DISTINCT col)untuk nilai unik. - Padankan operator perbandingan dengan perkataan dalam soalan.
- Penapis baris diletakkan dalam WHERE, manakala penapis agregat diletakkan dalam HAVING.
- Gunakan SELECT hanya untuk kekunci supaya boleh digunakan oleh subkueri IN atau cantuman.
Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “Mengira dan Menapis Kumpulan” percuma?
Ya — teks penuh “Mengira dan Menapis Kumpulan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengira dan Menapis Kumpulan”?
Cari kumpulan yang memenuhi ambang, iaitu soalan piawai “pelanggan dengan lebih daripada N pesanan” Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengira dan Menapis Kumpulan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Peraturan GROUP BY untuk Lajur SELECT
- HAVING berbanding WHERE
- Mengumpulkan Mengikut Pelbagai Lajur dan Ungkapan
- Mengira dan Menapis Kumpulan