Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL- Избиране на най-сходния продукт

Опитайте това

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 получава closest matches за всички продукти можете да включите product_id в най-вътрешната заявка, за да получите резултатите за конкретен product_id , използвах LEFT JOIN така че дори ако product няма съвпадения, показва се

SQLFIDDLE

Надявам се това да помогне



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Незаконен микс от съпоставяне (utf8_general_ci,IMPLICIT) и (utf8_unicode_ci,IMPLICIT) за операция '=' в MySQL Stored Procedure

  2. Scala Slick:MTable.getTables връща празен вектор/списък

  3. сортирайте сбора в група по

  4. mysql получава last_insert_id() в тригер

  5. MySQL:чувствителен ли е регистърът на буквите в израза SELECT?