5 SELECT avg(four) AS avg_1 FROM onek;
7 SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
9 -- In 7.1, avg(float4) is computed using float8 arithmetic.
10 -- Round the result to 3 digits to avoid platform-specific results.
12 SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;
14 SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
17 SELECT sum(four) AS sum_1500 FROM onek;
18 SELECT sum(a) AS sum_198 FROM aggtest;
19 SELECT sum(b) AS avg_431_773 FROM aggtest;
20 SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
22 SELECT max(four) AS max_3 FROM onek;
23 SELECT max(a) AS max_100 FROM aggtest;
24 SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
25 SELECT max(student.gpa) AS max_3_7 FROM student;
27 SELECT stddev_pop(b) FROM aggtest;
28 SELECT stddev_samp(b) FROM aggtest;
29 SELECT var_pop(b) FROM aggtest;
30 SELECT var_samp(b) FROM aggtest;
32 SELECT stddev_pop(b::numeric) FROM aggtest;
33 SELECT stddev_samp(b::numeric) FROM aggtest;
34 SELECT var_pop(b::numeric) FROM aggtest;
35 SELECT var_samp(b::numeric) FROM aggtest;
37 -- population variance is defined for a single tuple, sample variance
39 SELECT var_pop(1.0), var_samp(2.0);
40 SELECT stddev_pop(3.0::numeric), stddev_samp(4.0::numeric);
42 -- SQL2003 binary aggregates
43 SELECT regr_count(b, a) FROM aggtest;
44 SELECT regr_sxx(b, a) FROM aggtest;
45 SELECT regr_syy(b, a) FROM aggtest;
46 SELECT regr_sxy(b, a) FROM aggtest;
47 SELECT regr_avgx(b, a), regr_avgy(b, a) FROM aggtest;
48 SELECT regr_r2(b, a) FROM aggtest;
49 SELECT regr_slope(b, a), regr_intercept(b, a) FROM aggtest;
50 SELECT covar_pop(b, a), covar_samp(b, a) FROM aggtest;
51 SELECT corr(b, a) FROM aggtest;
53 SELECT count(four) AS cnt_1000 FROM onek;
54 SELECT count(DISTINCT four) AS cnt_4 FROM onek;
56 select ten, count(*), sum(four) from onek
57 group by ten order by ten;
59 select ten, count(four), sum(DISTINCT four) from onek
60 group by ten order by ten;
62 -- user-defined aggregates
63 SELECT newavg(four) AS avg_1 FROM onek;
64 SELECT newsum(four) AS sum_1500 FROM onek;
65 SELECT newcnt(four) AS cnt_1000 FROM onek;
66 SELECT newcnt(*) AS cnt_1000 FROM onek;
67 SELECT oldcnt(*) AS cnt_1000 FROM onek;
68 SELECT sum2(q1,q2) FROM int8_tbl;
70 -- test for outer-level aggregates
73 select ten, sum(distinct four) from onek a
75 having exists (select 1 from onek b where sum(distinct a.four) = b.four);
77 -- this should fail because subquery has an agg of its own in WHERE
78 select ten, sum(distinct four) from onek a
80 having exists (select 1 from onek b
81 where sum(distinct a.four + b.four) = b.four);
84 -- test for bitwise integer aggregates
86 CREATE TEMPORARY TABLE bitwise_test(
101 COPY bitwise_test FROM STDIN NULL 'null';
113 BIT_AND(y) AS "0100",
124 -- test boolean aggregates
126 -- first test all possible transition and final states
129 -- boolean and transitions
130 -- null because strict
131 booland_statefunc(NULL, NULL) IS NULL AS "t",
132 booland_statefunc(TRUE, NULL) IS NULL AS "t",
133 booland_statefunc(FALSE, NULL) IS NULL AS "t",
134 booland_statefunc(NULL, TRUE) IS NULL AS "t",
135 booland_statefunc(NULL, FALSE) IS NULL AS "t",
136 -- and actual computations
137 booland_statefunc(TRUE, TRUE) AS "t",
138 NOT booland_statefunc(TRUE, FALSE) AS "t",
139 NOT booland_statefunc(FALSE, TRUE) AS "t",
140 NOT booland_statefunc(FALSE, FALSE) AS "t";
143 -- boolean or transitions
144 -- null because strict
145 boolor_statefunc(NULL, NULL) IS NULL AS "t",
146 boolor_statefunc(TRUE, NULL) IS NULL AS "t",
147 boolor_statefunc(FALSE, NULL) IS NULL AS "t",
148 boolor_statefunc(NULL, TRUE) IS NULL AS "t",
149 boolor_statefunc(NULL, FALSE) IS NULL AS "t",
150 -- actual computations
151 boolor_statefunc(TRUE, TRUE) AS "t",
152 boolor_statefunc(TRUE, FALSE) AS "t",
153 boolor_statefunc(FALSE, TRUE) AS "t",
154 NOT boolor_statefunc(FALSE, FALSE) AS "t";
156 CREATE TEMPORARY TABLE bool_test(
168 COPY bool_test FROM STDIN NULL 'null';
179 BOOL_AND(NOT b2) AS "f",
180 BOOL_AND(NOT b3) AS "t"
188 EVERY(NOT b2) AS "f",
197 BOOL_OR(NOT b2) AS "f",
198 BOOL_OR(NOT b3) AS "t"
202 -- Test several cases that should be optimized into indexscans instead of
203 -- the generic aggregate implementation. We can't actually verify that they
204 -- are done as indexscans, but we can check that the results are correct.
208 select max(unique1) from tenk1;
209 select max(unique1) from tenk1 where unique1 < 42;
210 select max(unique1) from tenk1 where unique1 > 42;
211 select max(unique1) from tenk1 where unique1 > 42000;
213 -- multi-column index (uses tenk1_thous_tenthous)
214 select max(tenthous) from tenk1 where thousand = 33;
215 select min(tenthous) from tenk1 where thousand = 33;
217 -- check parameter propagation into an indexscan subquery
218 select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt