Fix obsolete comment regarding FSM truncation.
[PostgreSQL.git] / src / test / regress / expected / aggregates.out
blob46f6f18ed0562c0d79024091ff06ff7bda067b99
1 --
2 -- AGGREGATES
3 --
4 SELECT avg(four) AS avg_1 FROM onek;
5        avg_1        
6 --------------------
7  1.5000000000000000
8 (1 row)
10 SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
11        avg_32        
12 ---------------------
13  32.6666666666666667
14 (1 row)
16 -- In 7.1, avg(float4) is computed using float8 arithmetic.
17 -- Round the result to 3 digits to avoid platform-specific results.
18 SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;
19  avg_107_943 
20 -------------
21      107.943
22 (1 row)
24 SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
25  avg_3_4 
26 ---------
27      3.4
28 (1 row)
30 SELECT sum(four) AS sum_1500 FROM onek;
31  sum_1500 
32 ----------
33      1500
34 (1 row)
36 SELECT sum(a) AS sum_198 FROM aggtest;
37  sum_198 
38 ---------
39      198
40 (1 row)
42 SELECT sum(b) AS avg_431_773 FROM aggtest;
43  avg_431_773 
44 -------------
45      431.773
46 (1 row)
48 SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
49  avg_6_8 
50 ---------
51      6.8
52 (1 row)
54 SELECT max(four) AS max_3 FROM onek;
55  max_3 
56 -------
57      3
58 (1 row)
60 SELECT max(a) AS max_100 FROM aggtest;
61  max_100 
62 ---------
63      100
64 (1 row)
66 SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
67  max_324_78 
68 ------------
69      324.78
70 (1 row)
72 SELECT max(student.gpa) AS max_3_7 FROM student;
73  max_3_7 
74 ---------
75      3.7
76 (1 row)
78 SELECT stddev_pop(b) FROM aggtest;
79    stddev_pop    
80 -----------------
81  131.10703231895
82 (1 row)
84 SELECT stddev_samp(b) FROM aggtest;
85    stddev_samp    
86 ------------------
87  151.389360803998
88 (1 row)
90 SELECT var_pop(b) FROM aggtest;
91      var_pop      
92 ------------------
93  17189.0539234823
94 (1 row)
96 SELECT var_samp(b) FROM aggtest;
97      var_samp     
98 ------------------
99  22918.7385646431
100 (1 row)
102 SELECT stddev_pop(b::numeric) FROM aggtest;
103     stddev_pop    
104 ------------------
105  131.107032862199
106 (1 row)
108 SELECT stddev_samp(b::numeric) FROM aggtest;
109    stddev_samp    
110 ------------------
111  151.389361431288
112 (1 row)
114 SELECT var_pop(b::numeric) FROM aggtest;
115       var_pop       
116 --------------------
117  17189.054065929769
118 (1 row)
120 SELECT var_samp(b::numeric) FROM aggtest;
121       var_samp      
122 --------------------
123  22918.738754573025
124 (1 row)
126 -- population variance is defined for a single tuple, sample variance
127 -- is not
128 SELECT var_pop(1.0), var_samp(2.0);
129  var_pop | var_samp 
130 ---------+----------
131        0 |         
132 (1 row)
134 SELECT stddev_pop(3.0::numeric), stddev_samp(4.0::numeric);
135  stddev_pop | stddev_samp 
136 ------------+-------------
137           0 |            
138 (1 row)
140 -- SQL2003 binary aggregates
141 SELECT regr_count(b, a) FROM aggtest;
142  regr_count 
143 ------------
144           4
145 (1 row)
147 SELECT regr_sxx(b, a) FROM aggtest;
148  regr_sxx 
149 ----------
150      5099
151 (1 row)
153 SELECT regr_syy(b, a) FROM aggtest;
154      regr_syy     
155 ------------------
156  68756.2156939293
157 (1 row)
159 SELECT regr_sxy(b, a) FROM aggtest;
160      regr_sxy     
161 ------------------
162  2614.51582155004
163 (1 row)
165 SELECT regr_avgx(b, a), regr_avgy(b, a) FROM aggtest;
166  regr_avgx |    regr_avgy     
167 -----------+------------------
168       49.5 | 107.943152273074
169 (1 row)
171 SELECT regr_r2(b, a) FROM aggtest;
172       regr_r2       
173 --------------------
174  0.0194977982031803
175 (1 row)
177 SELECT regr_slope(b, a), regr_intercept(b, a) FROM aggtest;
178     regr_slope     |  regr_intercept  
179 -------------------+------------------
180  0.512750700441271 | 82.5619926012309
181 (1 row)
183 SELECT covar_pop(b, a), covar_samp(b, a) FROM aggtest;
184     covar_pop    |    covar_samp    
185 -----------------+------------------
186  653.62895538751 | 871.505273850014
187 (1 row)
189 SELECT corr(b, a) FROM aggtest;
190        corr        
191 -------------------
192  0.139634516517873
193 (1 row)
195 SELECT count(four) AS cnt_1000 FROM onek;
196  cnt_1000 
197 ----------
198      1000
199 (1 row)
201 SELECT count(DISTINCT four) AS cnt_4 FROM onek;
202  cnt_4 
203 -------
204      4
205 (1 row)
207 select ten, count(*), sum(four) from onek
208 group by ten order by ten;
209  ten | count | sum 
210 -----+-------+-----
211    0 |   100 | 100
212    1 |   100 | 200
213    2 |   100 | 100
214    3 |   100 | 200
215    4 |   100 | 100
216    5 |   100 | 200
217    6 |   100 | 100
218    7 |   100 | 200
219    8 |   100 | 100
220    9 |   100 | 200
221 (10 rows)
223 select ten, count(four), sum(DISTINCT four) from onek
224 group by ten order by ten;
225  ten | count | sum 
226 -----+-------+-----
227    0 |   100 |   2
228    1 |   100 |   4
229    2 |   100 |   2
230    3 |   100 |   4
231    4 |   100 |   2
232    5 |   100 |   4
233    6 |   100 |   2
234    7 |   100 |   4
235    8 |   100 |   2
236    9 |   100 |   4
237 (10 rows)
239 -- user-defined aggregates
240 SELECT newavg(four) AS avg_1 FROM onek;
241        avg_1        
242 --------------------
243  1.5000000000000000
244 (1 row)
246 SELECT newsum(four) AS sum_1500 FROM onek;
247  sum_1500 
248 ----------
249      1500
250 (1 row)
252 SELECT newcnt(four) AS cnt_1000 FROM onek;
253  cnt_1000 
254 ----------
255      1000
256 (1 row)
258 SELECT newcnt(*) AS cnt_1000 FROM onek;
259  cnt_1000 
260 ----------
261      1000
262 (1 row)
264 SELECT oldcnt(*) AS cnt_1000 FROM onek;
265  cnt_1000 
266 ----------
267      1000
268 (1 row)
270 SELECT sum2(q1,q2) FROM int8_tbl;
271        sum2        
272 -------------------
273  18271560493827981
274 (1 row)
276 -- test for outer-level aggregates
277 -- this should work
278 select ten, sum(distinct four) from onek a
279 group by ten
280 having exists (select 1 from onek b where sum(distinct a.four) = b.four);
281  ten | sum 
282 -----+-----
283    0 |   2
284    2 |   2
285    4 |   2
286    6 |   2
287    8 |   2
288 (5 rows)
290 -- this should fail because subquery has an agg of its own in WHERE
291 select ten, sum(distinct four) from onek a
292 group by ten
293 having exists (select 1 from onek b
294                where sum(distinct a.four + b.four) = b.four);
295 ERROR:  aggregates not allowed in WHERE clause
296 LINE 4:                where sum(distinct a.four + b.four) = b.four)...
297                              ^
299 -- test for bitwise integer aggregates
301 CREATE TEMPORARY TABLE bitwise_test(
302   i2 INT2,
303   i4 INT4,
304   i8 INT8,
305   i INTEGER,
306   x INT2,
307   y BIT(4)
309 -- empty case
310 SELECT 
311   BIT_AND(i2) AS "?",
312   BIT_OR(i4)  AS "?"
313 FROM bitwise_test;
314  ? | ? 
315 ---+---
316    |  
317 (1 row)
319 COPY bitwise_test FROM STDIN NULL 'null';
320 SELECT
321   BIT_AND(i2) AS "1",
322   BIT_AND(i4) AS "1",
323   BIT_AND(i8) AS "1",
324   BIT_AND(i)  AS "?",
325   BIT_AND(x)  AS "0",
326   BIT_AND(y)  AS "0100",
327   BIT_OR(i2)  AS "7",
328   BIT_OR(i4)  AS "7",
329   BIT_OR(i8)  AS "7",
330   BIT_OR(i)   AS "?",
331   BIT_OR(x)   AS "7",
332   BIT_OR(y)   AS "1101"
333 FROM bitwise_test;
334  1 | 1 | 1 | ? | 0 | 0100 | 7 | 7 | 7 | ? | 7 | 1101 
335 ---+---+---+---+---+------+---+---+---+---+---+------
336  1 | 1 | 1 | 1 | 0 | 0100 | 7 | 7 | 7 | 3 | 7 | 1101
337 (1 row)
340 -- test boolean aggregates
342 -- first test all possible transition and final states
343 SELECT
344   -- boolean and transitions
345   -- null because strict
346   booland_statefunc(NULL, NULL)  IS NULL AS "t",
347   booland_statefunc(TRUE, NULL)  IS NULL AS "t",
348   booland_statefunc(FALSE, NULL) IS NULL AS "t",
349   booland_statefunc(NULL, TRUE)  IS NULL AS "t",
350   booland_statefunc(NULL, FALSE) IS NULL AS "t",
351   -- and actual computations
352   booland_statefunc(TRUE, TRUE) AS "t",
353   NOT booland_statefunc(TRUE, FALSE) AS "t",
354   NOT booland_statefunc(FALSE, TRUE) AS "t",
355   NOT booland_statefunc(FALSE, FALSE) AS "t";
356  t | t | t | t | t | t | t | t | t 
357 ---+---+---+---+---+---+---+---+---
358  t | t | t | t | t | t | t | t | t
359 (1 row)
361 SELECT
362   -- boolean or transitions
363   -- null because strict
364   boolor_statefunc(NULL, NULL)  IS NULL AS "t",
365   boolor_statefunc(TRUE, NULL)  IS NULL AS "t",
366   boolor_statefunc(FALSE, NULL) IS NULL AS "t",
367   boolor_statefunc(NULL, TRUE)  IS NULL AS "t",
368   boolor_statefunc(NULL, FALSE) IS NULL AS "t",
369   -- actual computations
370   boolor_statefunc(TRUE, TRUE) AS "t",
371   boolor_statefunc(TRUE, FALSE) AS "t",
372   boolor_statefunc(FALSE, TRUE) AS "t",
373   NOT boolor_statefunc(FALSE, FALSE) AS "t";
374  t | t | t | t | t | t | t | t | t 
375 ---+---+---+---+---+---+---+---+---
376  t | t | t | t | t | t | t | t | t
377 (1 row)
379 CREATE TEMPORARY TABLE bool_test(  
380   b1 BOOL,
381   b2 BOOL,
382   b3 BOOL,
383   b4 BOOL);
384 -- empty case
385 SELECT
386   BOOL_AND(b1)   AS "n",
387   BOOL_OR(b3)    AS "n"
388 FROM bool_test;
389  n | n 
390 ---+---
391    | 
392 (1 row)
394 COPY bool_test FROM STDIN NULL 'null';
395 SELECT
396   BOOL_AND(b1)     AS "f",
397   BOOL_AND(b2)     AS "t",
398   BOOL_AND(b3)     AS "f",
399   BOOL_AND(b4)     AS "n",
400   BOOL_AND(NOT b2) AS "f",
401   BOOL_AND(NOT b3) AS "t"
402 FROM bool_test;
403  f | t | f | n | f | t 
404 ---+---+---+---+---+---
405  f | t | f |   | f | t
406 (1 row)
408 SELECT
409   EVERY(b1)     AS "f",
410   EVERY(b2)     AS "t",
411   EVERY(b3)     AS "f",
412   EVERY(b4)     AS "n",
413   EVERY(NOT b2) AS "f",
414   EVERY(NOT b3) AS "t"
415 FROM bool_test;
416  f | t | f | n | f | t 
417 ---+---+---+---+---+---
418  f | t | f |   | f | t
419 (1 row)
421 SELECT
422   BOOL_OR(b1)      AS "t",
423   BOOL_OR(b2)      AS "t",
424   BOOL_OR(b3)      AS "f",
425   BOOL_OR(b4)      AS "n",
426   BOOL_OR(NOT b2)  AS "f",
427   BOOL_OR(NOT b3)  AS "t"
428 FROM bool_test;
429  t | t | f | n | f | t 
430 ---+---+---+---+---+---
431  t | t | f |   | f | t
432 (1 row)
435 -- Test several cases that should be optimized into indexscans instead of
436 -- the generic aggregate implementation.  We can't actually verify that they
437 -- are done as indexscans, but we can check that the results are correct.
439 -- Basic cases
440 select max(unique1) from tenk1;
441  max  
442 ------
443  9999
444 (1 row)
446 select max(unique1) from tenk1 where unique1 < 42;
447  max 
448 -----
449   41
450 (1 row)
452 select max(unique1) from tenk1 where unique1 > 42;
453  max  
454 ------
455  9999
456 (1 row)
458 select max(unique1) from tenk1 where unique1 > 42000;
459  max 
460 -----
461     
462 (1 row)
464 -- multi-column index (uses tenk1_thous_tenthous)
465 select max(tenthous) from tenk1 where thousand = 33;
466  max  
467 ------
468  9033
469 (1 row)
471 select min(tenthous) from tenk1 where thousand = 33;
472  min 
473 -----
474   33
475 (1 row)
477 -- check parameter propagation into an indexscan subquery
478 select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt
479 from int4_tbl;
480      f1      | gt 
481 -------------+----
482            0 |  1
483       123456 |   
484      -123456 |  0
485   2147483647 |   
486  -2147483647 |  0
487 (5 rows)
489 -- check some cases that were handled incorrectly in 8.3.0
490 select distinct max(unique2) from tenk1;
491  max  
492 ------
493  9999
494 (1 row)
496 select max(unique2) from tenk1 order by 1;
497  max  
498 ------
499  9999
500 (1 row)
502 select max(unique2) from tenk1 order by max(unique2);
503  max  
504 ------
505  9999
506 (1 row)
508 select max(unique2) from tenk1 order by max(unique2)+1;
509  max  
510 ------
511  9999
512 (1 row)
514 select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;
515  max  | g 
516 ------+---
517  9999 | 3
518  9999 | 2
519  9999 | 1
520 (3 rows)