Itu pertanyaan yang sangat bagus. Saya sudah membaca beberapa jawaban yang bermanfaat di sini, tetapi mungkin saya dapat menambahkan penjelasan yang lebih tepat.
Mengurangi jumlah hasil kueri dengan pernyataan GROUP BY mudah selama Anda tidak meminta informasi tambahan. Mari kita asumsikan Anda mendapat 'lokasi' tabel berikut.
--country-- --city--
France Lyon
Poland Krakow
France Paris
France Marseille
Italy Milano
Sekarang kueri
SELECT country FROM locations
GROUP BY country
akan menghasilkan:
--country--
France
Poland
Italy
Namun, pertanyaan berikut
SELECT country, city FROM locations
GROUP BY country
... melempar kesalahan dalam MS SQL, karena bagaimana komputer Anda bisa tahu yang mana dari tiga kota Prancis "Lyon", "Paris" atau "Marseille" yang ingin Anda baca di lapangan di sebelah kanan "Prancis"?
Untuk memperbaiki kueri kedua, Anda harus menambahkan informasi ini. Salah satu cara untuk melakukan ini adalah dengan menggunakan fungsi MAX () atau MIN (), memilih nilai terbesar atau terkecil di antara semua kandidat. MAX () dan MIN () tidak hanya berlaku untuk nilai numerik, tetapi juga membandingkan urutan abjad dari nilai string.
SELECT country, MAX(city) FROM locations
GROUP BY country
akan menghasilkan:
--country-- --city--
France Paris
Poland Krakow
Italy Milano
atau:
SELECT country, MIN(city) FROM locations
GROUP BY country
akan menghasilkan:
--country-- --city--
France Lyon
Poland Krakow
Italy Milano
Fungsi-fungsi ini adalah solusi yang baik selama Anda baik-baik saja dengan memilih nilai Anda dari kedua ujung urutan abjad (atau numerik). Tetapi bagaimana jika ini tidak terjadi? Mari kita asumsikan bahwa Anda memerlukan nilai dengan karakteristik tertentu, misalnya dimulai dengan huruf 'M'. Sekarang segalanya menjadi rumit.
Satu-satunya solusi yang bisa saya temukan sejauh ini adalah dengan memasukkan seluruh permintaan Anda ke dalam subquery, dan membangun kolom tambahan di luarnya dengan tangan:
SELECT
countrylist.*,
(SELECT TOP 1 city
FROM locations
WHERE
country = countrylist.country
AND city like 'M%'
)
FROM
(SELECT country FROM locations
GROUP BY country) countrylist
akan menghasilkan:
--country-- --city--
France Marseille
Poland NULL
Italy Milano
SELECT DISTINCT * FROM table
tidak bekerja untukmu?