DISTINCT pada Berbilang Lajur
Keunikan merentas gabungan.
DISTINCT pada Berbilang Lajur ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 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 SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Mengapa Berbilang Lajur?
Anda sudah tahu bahawa SELECT DISTINCT membuang baris pendua. Tetapi apakah maksud “pendua” apabila pertanyaan anda mengembalikan beberapa lajur?
Sesuatu baris hanya dianggap pendua apabila setiap lajur yang dipilih mempunyai nilai yang sama seperti baris lain. Jika walaupun satu lajur berbeza, kedua-dua baris dikekalkan.
Jadual Contoh: Pesanan
Mari kita cipta jadual pesanan yang kecil untuk bereksperimen. Jadual ini menyimpan pelanggan yang membeli daripada kategori mana dan di negara mana.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');DISTINCT pada Satu Lajur
Sebagai peringatan ringkas, menggunakan DISTINCT pada satu lajur mengembalikan setiap nilai unik bagi lajur itu sahaja.
Di sini, kita mendapatkan setiap nama pelanggan yang unik — hanya tiga baris walaupun terdapat enam pesanan.
SELECT DISTINCT customer
FROM orders;DISTINCT pada Dua Lajur
Sekarang tambahkan lajur kedua. Kata kunci DISTINCT masih muncul sekali sahaja, tepat selepas SELECT. Pangkalan data menganggap setiap pasangan (pelanggan, kategori) yang unik sebagai satu baris.
Alice muncul dua kali — sekali untuk Elektronik dan sekali untuk Buku — kerana kedua-duanya ialah gabungan yang berbeza.
SELECT DISTINCT customer, category
FROM orders;Cara Keunikan Diperiksa
Pangkalan data membandingkan salinan lengkap setiap baris. Untuk DISTINCT membuang sesuatu baris, semua lajur dalam senarai SELECT mesti sepadan tepat dengan baris yang telah ditemui.
Dalam jadual pesanan kita, baris 3 dan 5 kedua-duanya ialah (Bob, Elektronik, UK) — padanan sempurna bagi ketiga-tiga lajur — jadi salah satu daripadanya dibuang.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Padanan Separa Tidak Dibuang
Alice mempunyai dua baris dengan kategori = Elektronik, tetapi kedua-duanya mempunyai negara = US. Dengan ketiga-tiga lajur dipilih, kedua-dua baris asal itu adalah sama, jadi hanya satu dikekalkan.
Ubah pilihan dan ujian keunikan juga berubah.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;Kes Penggunaan Dunia Sebenar: Gabungan Unik
Corak yang lazim ialah mencari setiap gabungan unik dua atribut — contohnya, kategori produk yang dijual di setiap negara, tanpa mengira berapa kali setiap jualan berlaku.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;Menggabungkan DISTINCT dengan WHERE
Anda boleh menapis baris terlebih dahulu dengan WHERE, kemudian DISTINCT membuang pendua daripada hasil yang telah ditapis. Kedua-dua klausa ini berfungsi secara berasingan — WHERE mengehadkan data, manakala DISTINCT membuang pendua daripadanya.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT berbanding GROUP BY
Cara setara untuk mendapatkan gabungan unik ialah GROUP BY. Kedua-dua pendekatan menghasilkan hasil yang sama untuk pembuangan pendua biasa. Perbezaannya penting apabila anda mahukan nilai agregat: GROUP BY membolehkan anda menambah COUNT(*), SUM(), dan sebagainya, manakala DISTINCT tidak.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Mengira Gabungan Unik
Membungkus DISTINCT berbilang lajur dalam subkueri membolehkan anda mengira bilangan gabungan unik yang wujud. Ini cara yang berguna untuk mengukur kepelbagaian dalam data anda.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Kesilapan Lazim: DISTINCT Terpakai pada Semua Lajur
Salah tanggapan yang kerap berlaku ialah DISTINCT hanya terpakai pada lajur pertama yang disenaraikan. Hal itu tidak benar. DISTINCT sentiasa mempertimbangkan seluruh baris yang terbentuk daripada semua lajur yang dipilih.
Anda tidak boleh menggunakan DISTINCT pada sesetengah lajur sahaja sambil mengekalkan pendua dalam lajur lain — untuk itu, anda memerlukan fungsi tetingkap seperti ROW_NUMBER().
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;Semakan Ringkas
Uji pemahaman anda tentang DISTINCT pada berbilang lajur.
Imbas Kembali Pelajaran
Syabas! Berikut ialah perkara yang telah anda pelajari tentang menggunakan DISTINCT pada berbilang lajur:
- DISTINCT terpakai pada seluruh baris — semua lajur yang dipilih diperiksa bersama.
- Baris hanya disingkirkan apabila setiap lajur sepadan tepat dengan baris yang telah ditemui.
- Menambah atau membuang lajur daripada senarai SELECT mengubah baris yang dianggap sebagai pendua.
- Anda boleh menggabungkan DISTINCT dengan WHERE dan ORDER BY secara bebas.
- GROUP BY ialah alternatif yang setara dan diperlukan apabila anda turut memerlukan nilai agregat.
Menguasai DISTINCT berbilang lajur membolehkan anda meneroka gabungan unik dengan cekap dalam mana-mana set data.
Pelajari SQL 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
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “DISTINCT pada Berbilang Lajur” percuma?
Ya — teks penuh “DISTINCT pada Berbilang Lajur” 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 SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “DISTINCT pada Berbilang Lajur”?
Keunikan merentas gabungan. Anda berlatih SQL Academy 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 SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy 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 2 daripada 4.
Berapa lamakah pelajaran “DISTINCT pada Berbilang Lajur” 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 SQL Academy ini?
Ya. Setiap pelajaran SQL Academy 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
- Asas SELECT DISTINCT
- DISTINCT pada Berbilang Lajur
- PostgreSQL DISTINCT ON
- Mengira Nilai Unik