3

1 つのテーブルからすべてのマーチャント トランザクションをグループ化し、カウントを取得したいと考えています。問題は、マーチャント、たとえばレッドボックスに、レッドボックスと最後に追加された店舗番号 (レッドボックス 4562、レッドボックス*1234) があることです。グループ化の目的でカテゴリも含めます。

Category      Merchant
restaurant    bruger king 123 main st
restaurant    burger king 456 abc ave
restaurant    mc donalds * 45877d2d
restaurant    mc 'donalds *888544d
restaurant    subway 454545
travelsubway  MTA
gas station   mc donalds gas
travel        nyc taxi
travel        nyc-taxi

質問: マーチャントに住所または店舗の場所が追加されている場合、マーチャントをグループ化するにはどうすればよいですか。必要なのは、各マーチャントのカウントだけです。

4

3 に答える 3

4

簡単に言えば、特に純粋な SQL だけでは、これを正確に行う方法はありません。

完全一致を見つけることができ、LIKE演算子または (潜在的に巨大な) 一連の正規表現を使用してワイルドカード一致を見つけることができますが、同様の一致を見つけることも、一致の潜在的なスペルミスを見つけることもできません。

構築しているアプリケーションの種類に応じて、この問題を解決するために考えられるアプローチがいくつかあります。

まず、データベース内のマーチャント データを正規化します。Bruger Kingなどの正確な未処理の文字列をデータベースに保存しないことをお勧めます。既知の一連のマーチャントと一致しないマーチャントを見つけた場合は、データベース内の何かと既に一致しているかどうかをユーザーに尋ねてください。データが入ったら、それを処理し、既存の既知のマーチャントと照合します。

類似度係数を格納します。Jaccard インデックスのようなものを使用して、2 つの文字列がどの程度類似しているかを判断することができるかもしれません。おそらく数字を取り除いた後、これはかなりうまくいくかもしれません。少なくとも、どの業者かを推測できるユーザー インターフェイスを作成できるようになる可能性があります。また、一部のデータベース エンジンには、のよう聞こえるものを記述できるフルテキスト インデックス演算子があります。これらは、調査する価値がある可能性があります。

ユーザーごとの販売者の一致を記憶します。ユーザーがbruger king 123 main stBurger Kingに修正した場合、その関係を保存し、後でユーザーにプロンプ​​トを表示することなく記憶します。このデータは、他のユーザーがデータを修正するのにも役立ちます。

しかし、UI がない場合はどうなるでしょうか。おそらく、自動化されたデータ処理を行おうとしているのでしょう。上記のテクニックのいくつかは、このプロセスを自動化するのに役立つ可能性がありますが、何らかの人間の介入なしにこれを処理する方法は本当にありません. また、あなたのデータのソースも見てみたいと思います。おそらく、キーとして使用できる個別のマーチャント ID があるか、既知のすべてのマーチャントのリストがどこかに存在する可能性があります (クレジット カード会社がこの API を提供している可能性があります)。処理するデータが大量にある場合は、部分的に自動化する別のオプションがあります。 Amazon のMechanical Turkなどのサービスを使用します。

于 2013-09-12T16:51:00.950 に答える
1

あなたは好きを使うことができます

SELECT COUNT(*) AS "COUNT", "BURGER KING" 
FROM <tables>
WHERE restaurant LIKE "%king%"

UNION ALL
SELECT COUNT(*) AS "COUNT", "JACK IN THE BOX" 
FROM <tables>
Where resturant LIKE "jack in the box%"

レコードの綴り方によっては、ワイルドカードを移動する必要がある場合があります。

于 2013-09-12T16:23:01.800 に答える