Guest User

Untitled

a guest
Jul 16th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. SELECT C.id, C.name, json_agg(E) AS emails FROM contacts C
  2. LEFT JOIN emails E ON C.id = E.user_id
  3. GROUP BY C.id;
  4.  
  5. id | name | emails
  6. -----------------------------------------------------------
  7. 1 | Ryan | [{"id":3,"user_id":1,"email":"hello@world.com"},{"id":4,"user_id":1,"email":"again@awesome.com"}]
  8. 2 | Nick | [null]
  9.  
  10. SELECT C.id, C.name,
  11. COALESCE(json_agg(E) FILTER (WHERE E.user_id IS NOT NULL), '[]') AS emails
  12. FROM contacts C
  13. LEFT JOIN emails E ON C.id = E.user_id
  14. GROUP BY C.id, C.name
  15. ORDER BY C.id;
  16.  
  17. select
  18. c.id, c.name,
  19. case when count(e) = 0 then '[]' else json_agg(e) end as emails
  20. from contacts as c
  21. left outer join emails as e on c.id = e.user_id
  22. group by c.id
  23.  
  24. select
  25. c.id, c.name,
  26. coalesce(e.emails, '[]') as emails
  27. from contacts as c
  28. left outer join (
  29. select e.user_id, json_agg(e) as emails from emails as e group by e.user_id
  30. ) as e on e.user_id = c.id
  31.  
  32. SELECT C.id, C.name,
  33. COALESCE(NULLIF(json_agg(E)::TEXT, '[null]'), '[]')::JSON AS emails
  34. FROM contacts C
  35. LEFT JOIN emails E ON C.id = E.user_id
  36. GROUP BY C.id;
  37.  
  38. CREATE OR REPLACE FUNCTION public.json_clean_array(p_data JSON)
  39. RETURNS JSON
  40. LANGUAGE SQL IMMUTABLE
  41. AS $$
  42. -- removes elements that are json null (not sql-null) or empty
  43. SELECT json_agg(value)
  44. FROM json_array_elements(p_data)
  45. WHERE value::text <> 'null' AND value::text <> '""';
  46. $$;
  47.  
  48. CREATE OR REPLACE FUNCTION public.json_clean(p_data JSON)
  49. RETURNS JSON
  50. LANGUAGE SQL IMMUTABLE
  51. AS $$
  52. -- removes elements that are json null (not sql-null) or empty
  53. SELECT ('{' || string_agg(to_json(key) || ':' || value, ',') || '}') :: JSON
  54. FROM json_each(p_data)
  55. WHERE value::TEXT <> 'null' AND value::TEXT <> '""';
  56. $$;
  57.  
  58. CREATE OR REPLACE FUNCTION public.json_clean(p_data JSON)
  59. RETURNS JSON
  60. LANGUAGE SQL IMMUTABLE
  61. AS $$
  62. -- removes elements that are json null (not sql-null) or empty
  63. SELECT json_object_agg(key, value)
  64. FROM json_each(p_data)
  65. WHERE value::TEXT <> 'null' AND value::TEXT <> '""';
  66. $$;
  67.  
  68. select
  69. c.id, c.name,
  70. array_to_json(array(select email from emails e where e.user_id=c.id))
  71. from contacts c
  72.  
  73. CREATE OR REPLACE FUNCTION public.json_clean_array(data JSON)
  74. RETURNS JSON
  75. LANGUAGE SQL
  76. AS $$
  77. SELECT
  78. array_to_json(array_agg(value)) :: JSON
  79. FROM (
  80. SELECT
  81. value
  82. FROM json_array_elements(data)
  83. WHERE cast(value AS TEXT) != 'null' AND cast(value AS TEXT) != ''
  84. ) t;
  85. $$;
  86.  
  87. select
  88. friend_id as friend,
  89. json_clean_array(array_to_json(array_agg(comment))) as comments
  90. from some_entity_that_might_have_comments
  91. group by friend_id;
  92.  
  93. CREATE OR REPLACE FUNCTION public.json_clean(data JSON)
  94. RETURNS JSON
  95. LANGUAGE SQL
  96. AS $$
  97. SELECT
  98. ('{' || string_agg(to_json(key) || ':' || value, ',') || '}') :: JSON
  99. FROM (
  100. WITH to_clean AS (
  101. SELECT
  102. *
  103. FROM json_each(data)
  104. )
  105. SELECT
  106. *
  107. FROM json_each(data)
  108. WHERE cast(value AS TEXT) != 'null' AND cast(value AS TEXT) != ''
  109. ) t;
  110. $$;
  111.  
  112. SELECT C.id, C.name,
  113. case when exists (select true from emails where user_id=C.id) then json_agg(E) else '[]' end
  114. FROM contacts C
  115. LEFT JOIN emails E ON C.id = E.user_id
  116. GROUP BY C.id, C.name;
  117.  
  118. ...
  119. array_remove(array_agg(
  120. jsonb_build_object('att1', column1, 'att2', column2)
  121. ), to_jsonb('{"att1":null, "att2":null}'::json))
  122. ...
Add Comment
Please, Sign In to add comment