Guest User

Untitled

a guest
Apr 19th, 2018
492
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. CREATE TABLE a (id int, fname text, lname text, email text, phone text);
  2. INSERT INTO a VALUES
  3. (1, 'john', 'doe', 'john@gmail.com', null),
  4. (2, 'peter', 'green', 'peter@gmail.com', null);
  5.  
  6. CREATE TABLE b (id int, fname text, lname text, email text, phone text);
  7. INSERT INTO b VALUES
  8. (null, 'peter', 'glover', 'bob@gmail.com', '777'),
  9. (null, null, 'green', 'peter@gmail.com', '666');
  10.  
  11. fname = 0.1
  12. lname = 0.3
  13. email = 0.5
  14. phone = 0.5
  15.  
  16. (2, 'peter', 'green', 'peter@gmail.com', null) and
  17. (null, null, 'green', 'peter@gmail.com', '666') is 0.8 (lname + email)
  18.  
  19. (2, 'peter', 'green', 'peter@gmail.com', null) and
  20. (null, 'peter', 'glover', 'bob@gmail.com', '777') is 0.1 (fname)
  21.  
  22. id, fname, lname, email, phone, similarity
  23. 2, null,'green', 'peter@gmail.com', '666', 0.8
  24.  
  25. create or replace function a_b_similarity(a, b)
  26. returns numeric language sql as $$
  27. select
  28. coalesce(($1.fname = $2.fname)::int, 0) * 0.1 +
  29. coalesce(($1.lname = $2.lname)::int, 0) * 0.3 +
  30. coalesce(($1.email = $2.email)::int, 0) * 0.5 +
  31. coalesce(($1.phone = $2.phone)::int, 0) * 0.5
  32. $$;
  33.  
  34. select *, a_b_similarity(a, b)
  35. from b
  36. cross join a
  37.  
  38. id | fname | lname | email | phone | id | fname | lname | email | phone | a_b_similarity
  39. ----+-------+--------+-----------------+-------+----+-------+-------+-----------------+-------+----------------
  40. | peter | glover | bob@gmail.com | 777 | 1 | john | doe | john@gmail.com | | 0.0
  41. | peter | glover | bob@gmail.com | 777 | 2 | peter | green | peter@gmail.com | | 0.1
  42. | | green | peter@gmail.com | 666 | 1 | john | doe | john@gmail.com | | 0.0
  43. | | green | peter@gmail.com | 666 | 2 | peter | green | peter@gmail.com | | 0.8
  44. (4 rows)
Add Comment
Please, Sign In to add comment