次のフィールドID(主キー)、Customer_Name、Mobile、Emailを持つPostgreSQL 9.4のテーブルがあります。 ID列は一意であるが、必ずしも一意の個人を識別するものではない。顧客は、一意のIDとリンクするたびに、名前や携帯電話や電子メールのバリエーションを持つ複数のレコードを持つことができます。PostgreSQLを使用して条件に一致するレコードセットのクラスタフィールドを生成します。
私は、NameまたはMobileまたはEmailのいずれかの一致に基づいて顧客を一意に識別するCluster_IDという名前の新しい計算カラム(SQLクエリを使用)が必要な場合があります。あるレコードの電子メールが他のレコードと一致する場合、それらのレコードに同じCluster_IDを割り当てる必要があります。このCluster_IDは、一致するレコードのセットに対して一意でなければならず、クエリが実行されるたびに同じであることが好ましい。
私は(時にテストするためにSQLfiddle.com上で使用することができます)のPostgres用のサンプルDDLを作成しました:
CREATE TABLE Customer (
ID integer,
Name varchar(30),
Mobile varchar(20),
Email varchar(50)
);
INSERT INTO Customer (ID, Name, Mobile, Email) VALUES
(1, 'Tim', '9876728382', '[email protected]'),
(2, 'John', '9845323453', '[email protected]'),
(3, 'Tim', '8265748319', '[email protected]'),
(4, 'John Snow', '9845323453', NULL),
(5, 'Timmothy', '8265748319', '[email protected]'),
(6, 'John', '8345908112', '[email protected]'),
(7, 'Tim M. Jacob', NULL, '[email protected]'),
(8, 'John P. Snow', '8345908112', NULL),
(9, 'Rack', '7654783949', '[email protected]'),
(10, 'Racky Dsouza', '9934364837', '[email protected]'),
(11, 'Rock M. Dsouza', '9934364837', '[email protected]'),
(12, 'John Snowden', '8463865392', '[email protected]')
;
は、SQLクエリの期待される出力については、下記のリンクをチェックしてください。異なるレコードの他の値と一致する値(明るい黄色の背景)を強調表示していることに注意してください。
割り当てCLUSTER_IDは、好ましくは、名前、モバイルまたは電子メールからマッチング値の1つを有するレコードのセットに対して同じでなければなりません。
id = 9およびid = 10は共通の電子メール= 'racky @ email.com'を持っています。なぜこれら2つのid 9 + 10にcluster_idが異なるのかを説明してください。非常によく似たケースでは、id = 5とi = 7のクラスタIDは同じですが、同じ電子メールの 'timmothy @ somemail.com'もあります。 – krokodilko
私の悪い!それを指摘してくれてありがとう。私はシートを更新しました。 ID9とID10のcluster_idは同じです。 –