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

MySQLWHEREINクエリ-ORDERBYMatch

    私が正しく理解している場合は、一致数の降順で結果を並べ替えます。そのためには、次のことを試してください。

    SELECT movie
      FROM genre_rel 
     WHERE genre IN (1, 8, 3) 
     GROUP BY movie
     order by count(movie) desc
    

    また、すべての基準に一致する映画が必要な場合は、次を使用できます。

    SELECT movie
      FROM genre_rel 
     WHERE genre IN (1, 8, 3) 
     GROUP BY movie
    HAVING count(movie) = 3
    

    更新:

    これは、MySqlで実行できる最善の方法です。フィルタの順序に関する情報を抽出できないため、INは使用できません。フィルタリングの手段として派生テーブルを追加する場合は、この情報を追加して、位置の一致によって結果を表示するために使用できます。 genre_relテーブルに注文情報を指定しないため、映画ごとのジャンルの重要性が実際にはわからないことに注意してください。このクエリは、基準のジャンルの重要度の降順で一致する映画を提供します:

    SELECT movie
      FROM genre_rel 
      INNER join
      (
         select 1 genre, 1000 weight
         union all
         select 8, 100
         union all
         select 3, 10
      ) weights
     on genre_rel.genre = weights.genre
     GROUP BY movie
     order by sum(weight) desc
    

    5つを除くすべての映画は3つのジャンルすべてに属していることに注意してください。重要度の順序を表す列をgenre_relに追加すると、いくつかの数学(重み-重要度など)を考案する可能性があります。



    1. 最も近い経度/緯度に一致

    2. MariaDBでのWEEKDAY()のしくみ

    3. Android:MySQLに保存するデータを送信する

    4. SQL Server 2016:sys.dm_exec_function_stats