1

残念ながら、私の SQL はかなりさびています。私は現在、次のような声明を出しています。

SELECT field1, field2, field3 FROM table_name WHERE
    field1 = 'A' OR field2 = 'B' OR field3 = 'C' ORDER BY
        CASE WHEN field1 = 'A' THEN 1 ELSE 0 END +
        CASE WHEN field2 = 'B' THEN 1 ELSE 0 END +
        CASE WHEN field3 = 'C' THEN 1 ELSE 0 END
    DESC LIMIT 1;

このクエリは、、、存在field1、、およびそれぞれの「理想」に最も類似するアイテムを正しく見つけます。ただし、「一致した」フィールドの数も確認できるようにしたいと考えています。すでにその計算を実行しているので、簡単に取得できるはずですが、別のサブクエリがないとどうなるかわかりません。field2field3ABC

どんな助けでも大歓迎です!

4

1 に答える 1

2

更新しました

SELECT field1, field2, field3,
       CASE WHEN field1 = 'A' THEN 1 ELSE 0 END +
       CASE WHEN field2 = 'B' THEN 1 ELSE 0 END +
       CASE WHEN field3 = 'C' THEN 1 ELSE 0 END match_count
  FROM table_name 
 WHERE field1 = 'A' OR field2 = 'B' OR field3 = 'C' 
 ORDER BY match_count DESC

この特定のケース(MySqlCASEの場合)では、次のように置き換えることができます(fieldX = 'N')

SELECT field1, field2, field3,
       (field1 = 'A') + (field2 = 'B') + (field3 = 'C') match_count
  FROM table_name 
 WHERE field1 = 'A' OR field2 = 'B' OR field3 = 'C' 
 ORDER BY match_count DESC

match_count useHAVING句に基づいて結果セットを制限する

SELECT field1, field2, field3,
       (field1 = 'A') + (field2 = 'B') + (field3 = 'C') match_count
  FROM table_name 
 WHERE field1 = 'A' OR field2 = 'B' OR field3 = 'C' 
HAVING match_count > 1
 ORDER BY match_count DESC

上記のすべてのクエリのSQLFiddleデモを次に示します。

于 2013-06-28T06:50:14.530 に答える