Di Sqlite 3 saya mencoba mencari cara memilih baris berdasarkan nilai minimum. Saya pikir saya dibatasi oleh tidak cukup tahu tentang terminologi terkait untuk mencari google secara efektif.
Tabelnya terlihat seperti:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Saya ingin mendapatkan baris mana num2
adalah 1, 2
, dan 4
. Saya ingin melakukan seleksi berdasarkan nilai minimum num untuk setiap nilai unik kolom teks.
Jadi, untuk text = 'a'
, nilai minimumnya num
adalah 0
, jadi saya ingin baris 1 dan 2. Untuk text = 'b'
, nilai minimumnya num
adalah 1
, jadi saya ingin baris 4
.
Dengan menggunakan berbagai kombinasi grup, saya dapat memperoleh baris 1
dan 2
atau baris 1
dan 4
. Saya merasa seperti kehilangan komponen SQL yang akan melakukan apa yang saya inginkan, tetapi saya belum dapat menemukan apa yang bisa dilakukan.
Apa cara yang tepat untuk melakukan jenis permintaan ini?
Kemungkinan Solusi
Saya telah menemukan sebuah cara untuk melakukan ini. Saya tidak cukup memiliki reputasi untuk menjawab pertanyaan saya sendiri, jadi saya melakukan pembaruan di sini. Saya tidak yakin apakah selalu benar atau seperti apa efisiensi itu. Setiap komentar dipersilakan.
Saya menggunakan pernyataan pemilihan majemuk, di mana satu kueri menemukan nilai minimum num untuk setiap nilai teks yang unik:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Kemudian saya bergabung dengan tabel lengkap ini untuk mendapatkan semua baris yang cocok dengan dua kolom ini.
sqlite> with u as
( select num, text from t group by text having num = min( num ) )
select t.* from t join u on t.num = u.num and t.text = u.text;
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 b 4