aggregates_2.slt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. mode cockroach
  10. statement ok
  11. CREATE TABLE t (
  12. a INT NOT NULL,
  13. b TEXT NOT NULL,
  14. c TEXT
  15. );
  16. statement ok
  17. INSERT INTO t VALUES (1, '10', 'x'), (2, '20', NULL), (3, '30', NULL), (4, '40', 'x'), (5, '50a', 'x'), (5, '50b', 'y'), (5, '50c', 'z');
  18. query TT rowsort
  19. SELECT a, array_agg(b) FROM t GROUP BY a;
  20. ----
  21. 1 {10}
  22. 2 {20}
  23. 3 {30}
  24. 4 {40}
  25. 5 {50a,50b,50c}
  26. query TTT rowsort
  27. SELECT a, array_agg(b), array_agg(c) FROM t GROUP BY a;
  28. ----
  29. 2 {20} {NULL}
  30. 3 {30} {NULL}
  31. 1 {10} {x}
  32. 4 {40} {x}
  33. 5 {50a,50b,50c} {x,y,z}
  34. query TTT rowsort
  35. SELECT a, array_agg(b), string_agg(c, ',') FROM t GROUP BY a;
  36. ----
  37. 2 {20} NULL
  38. 3 {30} NULL
  39. 1 {10} x
  40. 4 {40} x
  41. 5 {50a,50b,50c} x,y,z
  42. query TTT rowsort
  43. SELECT a, array_agg(b), string_agg(c, ',' ORDER BY b DESC) FROM t GROUP BY a;
  44. ----
  45. 2 {20} NULL
  46. 3 {30} NULL
  47. 1 {10} x
  48. 4 {40} x
  49. 5 {50a,50b,50c} z,y,x
  50. query TTT rowsort
  51. SELECT a, array_agg(b), max(c) FROM t WHERE c <> 'x' GROUP BY a;
  52. ----
  53. 5 {50b,50c} z
  54. query TTT rowsort
  55. SELECT a, array_agg(b), max(b) FROM t GROUP BY a HAVING count(a) > 1;
  56. ----
  57. 5 {50a,50b,50c} 50c
  58. query TTT rowsort
  59. SELECT a, min(b), max(b) FROM t GROUP BY a;
  60. ----
  61. 1 10 10
  62. 2 20 20
  63. 3 30 30
  64. 4 40 40
  65. 5 50a 50c
  66. query TTT rowsort
  67. SELECT a, array_agg(b ORDER BY b ASC), array_agg(b ORDER BY b DESC) FROM t GROUP BY a;
  68. ----
  69. 1 {10} {10}
  70. 2 {20} {20}
  71. 3 {30} {30}
  72. 4 {40} {40}
  73. 5 {50a,50b,50c} {50c,50b,50a}
  74. query TTT rowsort
  75. SELECT array_agg(b ORDER BY b ASC), array_agg(b ORDER BY b DESC), bool_or(b IS NOT NULL) FROM t;
  76. ----
  77. {10,20,30,40,50a,50b,50c} {50c,50b,50a,40,30,20,10} true
  78. query TTT rowsort
  79. SELECT t1.a, array_agg(t1.c), array_agg(t2.c) FROM t t1 INNER JOIN t t2 ON t1.c = t2.c WHERE t1.c IS NOT NULL GROUP BY t1.a;
  80. ----
  81. 1 {x,x,x} {x,x,x}
  82. 4 {x,x,x} {x,x,x}
  83. 5 {x,x,x,y,z} {x,x,x,y,z}
  84. query TTTT rowsort
  85. SELECT sum(a), jsonb_agg(b), array_agg(b), array_agg(b) FROM t;
  86. ----
  87. 25 ["10","20","30","40","50a","50b","50c"] {10,20,30,40,50a,50b,50c} {10,20,30,40,50a,50b,50c}
  88. query TT rowsort
  89. SELECT a, array_agg(b ORDER BY b) FROM t GROUP BY a HAVING array_agg(b ORDER BY b) = array_agg(b ORDER BY b DESC);
  90. ----
  91. 1 {10}
  92. 2 {20}
  93. 3 {30}
  94. 4 {40}
  95. query TTT rowsort
  96. SELECT a, array_agg(b), array_agg(sha256(b::BYTEA)) FROM t GROUP BY a;
  97. ----
  98. 1 {10} {"\\x4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5"}
  99. 2 {20} {"\\xf5ca38f748a1d6eaf726b8a42fb575c3c71f1864a8143301782de13da2d9202b"}
  100. 3 {30} {"\\x624b60c58c9d8bfb6ff1886c2fd605d2adeb6ea4da576068201b6c6958ce93f4"}
  101. 4 {40} {"\\xd59eced1ded07f84c145592f65bdf854358e009c5cd705f5215bf18697fed103"}
  102. 5 {50a,50b,50c} {"\\x189a55d80e074ffaacb282b6f9b51dcc1152a4e3f365a09d086347cbddcbb49b","\\xb3aecad3a43c511942fac3629ec9d191ff86961285d711875822721a1b676cd9","\\xb7abe8e9eedafe78353d0d3c6d837e1295b727f2ce3e220b4271b25a3b2e347b"}
  103. query TTT rowsort
  104. SELECT a, array_agg(b), array_agg(CASE WHEN a = 1 THEN 'ooo' ELSE b END) FROM t GROUP BY a;
  105. ----
  106. 2 {20} {20}
  107. 3 {30} {30}
  108. 4 {40} {40}
  109. 1 {10} {ooo}
  110. 5 {50a,50b,50c} {50a,50b,50c}
  111. query TTT rowsort
  112. SELECT a, dense_rank() OVER (ORDER BY a), array_agg(b) FROM t GROUP BY a;
  113. ----
  114. 1 1 {10}
  115. 2 2 {20}
  116. 3 3 {30}
  117. 4 4 {40}
  118. 5 5 {50a,50b,50c}