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. MySQL:#126 - तालिका के लिए गलत कुंजी फ़ाइल

  2. MySQL में InnoDB के साथ पूर्ण पाठ खोज

  3. ग्रुप बाय स्टेटमेंट की नवीनतम टेक्स्ट प्रविष्टि प्राप्त करें

  4. दिनांक/समय की तुलना के लिए संचालन के लिए कॉलेशन का अवैध मिश्रण

  5. MySQL में UTF8 वर्णों को संग्रहीत नहीं कर सकता