@@ -116,6 +116,269 @@ SELECT COUNT(*) FROM t;
116116statement ok
117117DROP TABLE t;
118118
119+ # ==================== DataFusion Native Aggregate Functions ====================
120+
121+ statement ok
122+ CREATE TABLE agg_test (
123+ grp INT,
124+ val_int INT,
125+ val_bigint BIGINT,
126+ val_float FLOAT,
127+ val_double DOUBLE,
128+ val_bool BOOLEAN,
129+ ) WITH (commit_checkpoint_interval = 1) ENGINE = iceberg;
130+
131+ statement ok
132+ INSERT INTO agg_test VALUES
133+ (1, 10, 100, 1.5, 10.5, true),
134+ (1, 20, 200, 2.5, 20.5, true),
135+ (1, 30, 300, 3.5, 30.5, false),
136+ (2, 5, 50, 0.5, 5.5, false),
137+ (2, 15, 150, 1.0, 15.0, true),
138+ (2, NULL, NULL, NULL, NULL, NULL);
139+
140+ statement ok
141+ FLUSH;
142+
143+ sleep 5s
144+
145+ # ==================== SUM Aggregate Tests ====================
146+
147+ query ???
148+ SELECT grp, sum(val_int), sum(val_bigint)
149+ FROM agg_test
150+ GROUP BY grp
151+ ORDER BY grp;
152+ ----
153+ 1 60 600
154+ 2 20 200
155+
156+ # ==================== MIN/MAX Aggregate Tests ====================
157+
158+ query ????
159+ SELECT grp, min(val_int), max(val_int), min(val_float)
160+ FROM agg_test
161+ GROUP BY grp
162+ ORDER BY grp;
163+ ----
164+ 1 10 30 1.5
165+ 2 5 15 0.5
166+
167+ # ==================== COUNT Aggregate Tests ====================
168+ # count(*) and count(column)
169+
170+ query ???
171+ SELECT grp, count(*), count(val_int)
172+ FROM agg_test
173+ GROUP BY grp
174+ ORDER BY grp;
175+ ----
176+ 1 3 3
177+ 2 3 2
178+
179+ # ==================== AVG Aggregate Tests ====================
180+
181+ query ???
182+ SELECT grp, avg(val_int), avg(val_float)
183+ FROM agg_test
184+ GROUP BY grp
185+ ORDER BY grp;
186+ ----
187+ 1 20.00000000000000 2.5
188+ 2 10.00000000000000 0.75
189+
190+ # ==================== Variance Tests ====================
191+ # var_pop(column) and var_samp(column)
192+
193+ query ??
194+ SELECT grp, var_pop(val_int)
195+ FROM agg_test
196+ GROUP BY grp
197+ ORDER BY grp;
198+ ----
199+ 1 66.66666666666666
200+ 2 25.00000000000000
201+
202+ query ??
203+ SELECT grp, var_samp(val_int)
204+ FROM agg_test
205+ GROUP BY grp
206+ ORDER BY grp;
207+ ----
208+ 1 100.00000000000000
209+ 2 50.00000000000000
210+
211+ # ==================== Standard Deviation Tests ====================
212+ # stddev_pop(column) and stddev_samp(column)
213+
214+ query ??
215+ SELECT grp, stddev_pop(val_int)
216+ FROM agg_test
217+ GROUP BY grp
218+ ORDER BY grp;
219+ ----
220+ 1 8.164965809277259
221+ 2 5.000000000000000
222+
223+ query ??
224+ SELECT grp, stddev_samp(val_int)
225+ FROM agg_test
226+ GROUP BY grp
227+ ORDER BY grp;
228+ ----
229+ 1 10.000000000000000
230+ 2 7.071067811865476
231+
232+ # ==================== Bitwise Aggregate Tests ====================
233+ # bit_and(column), bit_or(column), bit_xor(column)
234+
235+ query ???
236+ SELECT grp, bit_and(val_int), bit_or(val_int), bit_xor(val_int)
237+ FROM agg_test
238+ GROUP BY grp
239+ ORDER BY grp;
240+ ----
241+ 1 0 30 0
242+ 2 5 15 10
243+
244+ # ==================== Boolean Aggregate Tests ====================
245+ # bool_and(column) and bool_or(column)
246+
247+ query ??
248+ SELECT grp, bool_and(val_bool), bool_or(val_bool)
249+ FROM agg_test
250+ GROUP BY grp
251+ ORDER BY grp;
252+ ----
253+ 1 f t
254+ 2 f t
255+
256+ # ==================== First/Last Value Tests ====================
257+ # first_value(column ORDER BY ...) and last_value(column ORDER BY ...)
258+
259+ query ??
260+ SELECT grp, first_value(val_int ORDER BY val_int), last_value(val_int ORDER BY val_int)
261+ FROM agg_test
262+ GROUP BY grp
263+ ORDER BY grp;
264+ ----
265+ 1 10 30
266+ 2 5 NULL
267+
268+ # ==================== Array Aggregate Tests ====================
269+ # array_agg(column ORDER BY ...)
270+
271+ query ?
272+ SELECT array_agg(val_int ORDER BY val_int)
273+ FROM agg_test
274+ WHERE grp = 1;
275+ ----
276+ {10,20,30}
277+
278+ query ?
279+ SELECT array_agg(val_int ORDER BY val_int DESC)
280+ FROM agg_test
281+ WHERE grp = 1;
282+ ----
283+ {30,20,10}
284+
285+ # Test array_agg with NULLs
286+ query ?
287+ SELECT array_agg(val_int ORDER BY val_int)
288+ FROM agg_test
289+ WHERE grp = 2;
290+ ----
291+ {5,15,NULL}
292+
293+ # ==================== DISTINCT Modifier Tests ====================
294+
295+ statement ok
296+ INSERT INTO agg_test VALUES
297+ (3, 1, 10, 1.0, 1.0, true),
298+ (3, 1, 10, 1.0, 1.0, true),
299+ (3, 2, 20, 2.0, 2.0, false);
300+
301+ statement ok
302+ FLUSH;
303+
304+ sleep 3s
305+
306+ query ??
307+ SELECT count(val_int), count(DISTINCT val_int)
308+ FROM agg_test
309+ WHERE grp = 3;
310+ ----
311+ 3 2
312+
313+ query ??
314+ SELECT sum(val_int), sum(DISTINCT val_int)
315+ FROM agg_test
316+ WHERE grp = 3;
317+ ----
318+ 4 3
319+
320+ # ==================== FILTER Clause Tests ====================
321+
322+ query ??
323+ SELECT
324+ sum(val_int),
325+ sum(val_int) FILTER (WHERE val_bool = true)
326+ FROM agg_test
327+ WHERE grp = 1;
328+ ----
329+ 60 30
330+
331+ query ??
332+ SELECT
333+ count(*),
334+ count(*) FILTER (WHERE val_int > 10)
335+ FROM agg_test
336+ WHERE grp = 1;
337+ ----
338+ 3 2
339+
340+ # ==================== Multiple Aggregates Tests ====================
341+
342+ query ???????
343+ SELECT
344+ grp,
345+ sum(val_int),
346+ avg(val_float),
347+ min(val_int),
348+ max(val_int),
349+ count(*),
350+ bool_or(val_bool)
351+ FROM agg_test
352+ WHERE grp <= 2
353+ GROUP BY grp
354+ ORDER BY grp;
355+ ----
356+ 1 60 2.5 10 30 3 t
357+ 2 20 0.75 5 15 3 t
358+
359+ # ==================== Aggregates with Expressions Tests ====================
360+
361+ query ??
362+ SELECT
363+ sum(val_int * 2),
364+ avg(val_float + val_double)
365+ FROM agg_test
366+ WHERE grp = 1;
367+ ----
368+ 120 23
369+
370+ # ==================== Empty Result Set Tests ====================
371+
372+ query ?????
373+ SELECT sum(val_int), avg(val_float), min(val_int), max(val_int), count(*)
374+ FROM agg_test
375+ WHERE grp = 999;
376+ ----
377+ NULL NULL NULL NULL 0
378+
379+ statement ok
380+ DROP TABLE agg_test;
381+
119382statement ok
120383DROP CONNECTION my_conn;
121384
0 commit comments