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.
Pertimbangkan pertanyaan berikut:
SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC;
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;
Walau bagaimanapun, pertanyaan ini akan gagal dengan ralat, kerana ORDER BY tidak dibenarkan pada lajur bukan agregat apabila DISTINCT adalah digunakan.
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;
Dalam pertanyaan ini:
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!