sql >> データベース >  >> RDS >> Mysql

タグによって最も類似した商品を判別するためのSQLクエリ

    このクエリは、共通のタグの最大数を持つすべてのアイテムを返します:

    SET @item = 1;
    
    SELECT
      goods_id
    FROM
      links
    WHERE
      tag_id IN (SELECT tag_id FROM links WHERE example@sqldat.com)
      AND example@sqldat.com
    GROUP BY
      goods_id
    HAVING
      COUNT(*) = (
        SELECT
          COUNT(*)
        FROM
          links
        WHERE
          tag_id IN (SELECT tag_id FROM links WHERE example@sqldat.com)
          AND example@sqldat.com
        GROUP BY
          goods_id
        ORDER BY
          COUNT(*) DESC
        LIMIT 1
      )
    

    フィドルこちら をご覧ください。 。

    または、これは、共通のタグがないものも含めて、共通の説明のタグの数順に並べられたすべてのアイテムを返します。

    SELECT
      goods_id
    FROM
      links
    WHERE
      example@sqldat.com
    GROUP BY
      goods_id
    ORDER BY
      COUNT(CASE WHEN tag_id IN (SELECT tag_id FROM links WHERE example@sqldat.com) THEN 1 END) DESC;
    


    1. AWSPostgresRDSテーブルをAWSS3にエクスポートする

    2. 結合、group by、および集計関数を使用したSQL選択クエリ

    3. MySQLでアクセントに敏感な主キーを使用する

    4. Alembicはカラムの変更を自動生成できますか?