关系图.sql 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. -- '6222024505288690000',
  2. SELECT unnest(array ['A', 'B', 'C']) AS node_id,
  3. unnest(array ['张三', '李四', '王五']) AS node_name;
  4. DROP TABLE IF EXISTS temp_core_nodes;
  5. DROP TABLE IF EXISTS person_rel_edge_trans_filter;
  6. DROP TABLE IF EXISTS person_rel_edge_trans;
  7. CREATE TEMP TABLE temp_core_nodes AS
  8. SELECT unnest(['6222024505288690226', '1023254100000211', '6216603637176773705',
  9. '3521023012569874',
  10. '6223092984200995695',
  11. '6237683810003447983',
  12. '6237683810003442235',
  13. '6225881084437762',
  14. '6222027549499181296',
  15. '513126197412174415', '513126199410052413', '110101199003071233',
  16. '330382199003081853', '510183198103160051'
  17. ]) AS node_id;
  18. -- 如果有日期条件 则过滤 日期
  19. CREATE TEMP TABLE person_rel_edge_trans_filter AS
  20. SELECT *
  21. FROM (
  22. -- 情况1: 核心 -> 外部
  23. SELECT *
  24. FROM person_rel_edge
  25. WHERE clazz = 'card_card'
  26. AND fx = 1
  27. AND node1 IN (SELECT node_id FROM temp_core_nodes)
  28. AND node2 NOT IN (SELECT node_id FROM temp_core_nodes)
  29. UNION ALL
  30. -- 情况2: 外部 -> 核心
  31. SELECT *
  32. FROM person_rel_edge
  33. WHERE clazz = 'card_card'
  34. AND fx = 2
  35. AND node1 NOT IN (SELECT node_id FROM temp_core_nodes)
  36. AND node2 IN (SELECT node_id FROM temp_core_nodes)) AS combined_edges;
  37. select node_id, node_type
  38. from (select node1 as node_id, 'card' as node_type
  39. from person_rel_edge_trans_filter
  40. GROUP BY node1
  41. HAVING count(node2) > 1
  42. union all
  43. select node2 as node_id, 'card' as node_type
  44. from person_rel_edge_trans_filter
  45. GROUP BY node2
  46. HAVING count(node1) > 1) as temp_node_id;
  47. -- 715条
  48. -- select count(*) from person_rel_edge_trans_filter GROUP BY node1, node1, sj;
  49. insert into temp_core_nodes
  50. select node_id
  51. from (select node1 as node_id
  52. from person_rel_edge_trans_filter
  53. union all
  54. select node2 as node_id
  55. from person_rel_edge_trans_filter) as temp_node_id
  56. group by node_id;
  57. -- 125条
  58. -- select count(*) from temp_core_nodes;
  59. -- select * from temp_core_nodes;
  60. -- 856条
  61. create table person_rel_edge_trans as
  62. SELECT *
  63. FROM person_rel_edge
  64. WHERE clazz = 'card_card'
  65. and node1 IN (SELECT node_id FROM temp_core_nodes)
  66. AND node2 IN (SELECT node_id FROM temp_core_nodes);
  67. select count(*)
  68. from person_rel_edge
  69. GROUP BY node1, node2, sj;
  70. SELECT node1, node2, sj, mc
  71. FROM person_rel_edge
  72. WHERE clazz not in ('card_card', 'sfz_sfz', 'sfz_obj', 'tel_tel')
  73. and node1 IN (SELECT node_id FROM temp_core_nodes)
  74. AND node2 IN (SELECT node_id FROM temp_core_nodes)
  75. GROUP BY node1, node2, sj;
  76. SELECT max(id) as id,
  77. node1,
  78. node2,
  79. mc,
  80. clazz,
  81. sum(num::decimal) as num,
  82. any_value(fx) as fx,
  83. any_value(lx) as lx
  84. FROM person_rel_edge_trans
  85. where clazz in ('card_card')
  86. group by node1, node2, mc, clazz;
  87. SELECT node1, node2
  88. FROM person_rel_edge_trans
  89. where clazz in ('card_card')
  90. group by node1, node2;
  91. --119
  92. SELECT *
  93. FROM temp_core_nodes;