Điều này đòi hỏi một số chú ý nơi đặt điều kiện (đến where
hoặc để on
?) để bạn không bị lừa :-) Bạn cần thêm điều kiện cho t1 vào where
mệnh đề t2 và on
mệnh đề:
SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value
AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL
AND t1.popularity > 3 /* and here */
Chưa thử nghiệm nó, nhưng nó sẽ hoạt động.
Cố gắng giải thích: điều kiện trong mệnh đề where ảnh hưởng đến các phần tử mà bạn coi là phần tử tiềm năng có giá trị thấp nhất. Trong khi điều kiện trong on
mệnh đề ảnh hưởng đến sự liên kết:bạn muốn so sánh nó với những yếu tố nào khác? Nó xác định nhóm mà bạn so sánh trong đó. Về mặt kỹ thuật, nó có tác động đến thời điểm t2. * Sẽ là NULL. Bạn đã đưa ra điều kiện về t2.popularity cho where
thay vào đó, bạn sẽ không nhận được bất kỳ NULL nào (tức là không tìm thấy các phần tử có giá trị thấp nhất) cho các nhóm mà các phần tử thấp nhất có mức độ phổ biến thấp.