Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menggunakan DISTINCT dan ORDER BY Bersama-sama dalam Pernyataan SELECT SQL Tunggal?

Bagaimanakah Saya Boleh Menggunakan DISTINCT dan ORDER BY Bersama-sama dalam Pernyataan SELECT SQL Tunggal?

Susan Sarandon
Lepaskan: 2025-01-07 09:16:41
asal
390 orang telah melayarinya

How Can I Use DISTINCT and ORDER BY Together in a Single SQL SELECT Statement?

Menggunakan DISTINCT dan ORDER BY dalam Pernyataan PILIHAN Tunggal

Apabila bekerja dengan pertanyaan SQL, adalah wajar untuk mengalih keluar nilai pendua menggunakan DISTINCT dan mengisih keputusan menggunakan PESANAN OLEH. Walau bagaimanapun, percubaan untuk menggunakan klausa ini bersama-sama dalam satu pernyataan boleh mengakibatkan tingkah laku yang tidak dijangka. Artikel ini akan menangani isu ini dan menyediakan penyelesaian untuk mencapai kedua-dua penapisan dan pengisihan dengan betul.

Pernyataan Masalah

Pertimbangkan pertanyaan berikut:

SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC;
Salin selepas log masuk

Pertanyaan ini akan kembali keputusan dipesan oleh lajur CreationDate dalam tertib menurun. Walau bagaimanapun, jika terdapat nilai pendua dalam lajur Kategori, nilai tersebut tidak akan dialih keluar.

Untuk mengalih keluar pendua, seseorang boleh cuba menggunakan kata kunci DISTINCT:

SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC;
Salin selepas log masuk

Walau bagaimanapun, pertanyaan ini akan gagal dengan ralat, kerana ORDER BY tidak dibenarkan pada lajur bukan agregat apabila DISTINCT adalah digunakan.

Penyelesaian

Untuk menyelesaikan isu ini, gunakan fungsi agregat bersama klausa KUMPULAN OLEH untuk mengumpulkan hasil mengikut lajur Kategori. Ini akan membenarkan kata kunci DISTINCT mengalih keluar nilai kategori pendua sementara masih membenarkan klausa ORDER BY mengisih hasil mengikut lajur CreationDate.

SELECT DISTINCT Category, MAX(CreationDate) 
FROM MonitoringJob 
GROUP BY Category 
ORDER BY MAX(CreationDate) DESC, Category;
Salin selepas log masuk

Dalam pertanyaan ini:

  • MAX (CreationDate) ialah fungsi agregat yang digunakan untuk mengisih hasil mengikut CreationDate terkini untuk setiap kategori.
  • KUMPULAN MENGIKUT Kategori mengumpulkan hasil mengikut lajur Kategori, membenarkan DISTINCT mengalih keluar nilai kategori pendua.
  • ORDER BY MAX(CreationDate) DESC, Category mengisih keputusan terlebih dahulu mengikut CreationDate terkini dalam setiap kategori dan kemudian mengikut abjad mengikut nama Kategori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan DISTINCT dan ORDER BY Bersama-sama dalam Pernyataan SELECT SQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan