Guest User

Untitled

a guest
Oct 10th, 2025
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. WITH
  2. left_table AS (
  3. SELECT *
  4. FROM (VALUES
  5. ('A', 1),
  6. ('A', 2),
  7. ('A', 3),
  8. ('A', 4),
  9. ('B', 5),
  10. ('B', 6),
  11. ('B', 7),
  12. ('B', 8)
  13. ) AS t(grp_id_left, record_id)
  14. ),
  15. right_table AS (
  16. SELECT *
  17. FROM (VALUES
  18. ('X', 1),
  19. ('X', 2),
  20. ('Y', 3),
  21. ('Y', 4),
  22. ('M', 1),
  23. ('N', 5),
  24. ('Q', 5),
  25. ('Q', 6),
  26. ('Q', 7)
  27. ) AS t(grp_id_rgt, record_id)
  28. ),
  29. aggregated AS (
  30. SELECT
  31. grp_id_left,
  32. grp_id_rgt,
  33. array_agg(record_id ORDER BY record_id) AS records,
  34. cardinality(array_agg(record_id)) AS records_size
  35. FROM left_table l
  36. JOIN right_table r USING (record_id)
  37. GROUP BY 1,2
  38. ),
  39. deduped AS (
  40. SELECT a.*
  41. FROM aggregated a
  42. WHERE NOT EXISTS (
  43. SELECT 1
  44. FROM aggregated b
  45. WHERE
  46. b.grp_id_left = a.grp_id_left
  47. AND a.records <@ b.records -- a is subset of b
  48. AND a.grp_id_rgt <> b.grp_id_rgt -- but a and b are different groups
  49. AND cardinality(a.records) < cardinality(b.records)
  50. )
  51. )
  52. SELECT grp_id_left, records AS list, grp_id_rgt
  53. FROM deduped
  54. ORDER BY grp_id_left, grp_id_rgt;
Advertisement
Add Comment
Please, Sign In to add comment