Trong Sqlite 3 Tôi đang cố gắng tìm ra cách chọn hàng dựa trên giá trị tối thiểu. Tôi nghĩ rằng tôi bị giới hạn bởi không biết đủ các thuật ngữ liên quan để tìm kiếm google một cách hiệu quả.
Bảng trông giống như:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Tôi muốn nhận được hàng nơi num2
là 1, 2
, và 4
. Tôi muốn thực hiện lựa chọn dựa trên giá trị num tối thiểu cho mỗi giá trị duy nhất của cột văn bản.
Vì vậy, với text = 'a'
giá trị tối thiểu num
là 0
, vì vậy tôi muốn hàng 1 và 2. Vì text = 'b'
, giá trị tối thiểu num
là 1
, vì vậy tôi muốn hàng 4
.
Sử dụng kết hợp nhiều nhóm khác nhau theo, tôi có thể nhận được hàng 1
và 2
hoặc hàng 1
và 4
. Tôi cảm thấy như tôi đang thiếu một thành phần SQL sẽ làm những gì tôi muốn, nhưng tôi không thể tìm ra nó có thể là gì.
Cách thích hợp để làm loại truy vấn này là gì?
Giải pháp có thể
Tôi đã tìm thấy một cách để làm điều này. Tôi không đủ uy tín để trả lời câu hỏi của riêng mình, vì vậy tôi đang thực hiện cập nhật tại đây. Tôi không chắc liệu nó luôn luôn đúng hay hiệu quả là như thế nào. Mọi ý kiến đều được chào đón.
Tôi đã sử dụng một câu lệnh chọn hỗn hợp, trong đó một truy vấn tìm giá trị tối thiểu của num cho mỗi giá trị duy nhất của văn bản:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Sau đó, tôi đã kết hợp điều này với bảng đầy đủ để có được tất cả các hàng khớp với hai cột này.
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