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

SQL- Chọn sản phẩm tương tự nhất

Hãy thử điều này

SELECT 
  a_product_id, 
  COALESCE( b_product_id, 'no_matchs_found' ) AS closest_product_match
FROM (
  SELECT 
    *,  
    @row_num := IF(@prev_value=A_product_id,@row_num+1,1) AS row_num,
    @prev_value := a_product_id
  FROM 
    (SELECT @prev_value := 0) r
    JOIN (
        SELECT 
         a.product_id as a_product_id,
         b.product_id as b_product_id,
         count( distinct b.Attributes ),
         count( distinct b2.Attributes ) as total_products
        FROM
          products a
          LEFT JOIN products b ON ( a.Attributes = b.Attributes AND a.product_id <> b.product_id )
          LEFT JOIN products b2 ON ( b2.product_id = b.product_id )
       /*WHERE */
         /*  a.product_id = 3 */
        GROUP BY
         a.product_id,
         b.product_id
        ORDER BY 
          1, 3 desc, 4
  ) t
) t2 
WHERE 
  row_num = 1

query ở trên lấy closest matches đối với tất cả các sản phẩm, bạn có thể bao gồm product_id trong truy vấn trong cùng, để nhận kết quả cho một product_id cụ thể , Tôi đã sử dụng LEFT JOIN để ngay cả khi một product không có kết quả phù hợp nào, nó được hiển thị

SQLFIDDLE

Hy vọng điều này sẽ giúp ích



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi thư mục dữ liệu MySQL 8.0. Tôi có thể sử dụng các thư mục OneDrive không?

  2. MySQL thay đổi UTF-8 thành ASCII-8BIT

  3. MySQL UDF sys_exec () không hoạt động

  4. Sử dụng Oracle JDeveloper với Dịch vụ Cơ sở dữ liệu MySQL trên Nền tảng Đám mây Oracle, Phần 3

  5. MySQL. Chọn phạm vi năm