sql >> Databáze >  >> RDS >> Mysql

SQL- Výběr nejpodobnějšího produktu

Zkuste toto

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

Výše uvedený query získá closest matches pro všechny produkty můžete uvést product_id v nejvnitřnějším dotazu, abyste získali výsledky pro konkrétní product_id , použil jsem LEFT JOIN takže i když jde o product nemá žádné shody, je zobrazen

SQLFIDDLE

Doufám, že to pomůže



  1. Generování vložení sql do pro Oracle

  2. Jak mohu simulovat proměnnou pole v MySQL?

  3. mysql_connect():Žádný takový soubor nebo adresář

  4. import souboru sql do databáze pomocí wamp