Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để viết n tuyệt vời nhất cho mỗi truy vấn loại nhóm, nhưng với các điều kiện bổ sung?

Đ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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo cơ sở dữ liệu MySQL với python

  2. GROUP_CONCAT có giới hạn

  3. Nhập dữ liệu Excel vào bảng quan hệ tại MySQL

  4. Cách thêm ràng buộc mặc định trong MySQL

  5. JSON trả lại không hoạt động bình thường