2000-01-09 04:48:39 +01:00
|
|
|
--
|
|
|
|
-- AGGREGATES
|
|
|
|
--
|
|
|
|
SELECT avg(four) AS avg_1 FROM onek;
|
2003-03-21 02:58:05 +01:00
|
|
|
avg_1
|
|
|
|
--------------------
|
|
|
|
1.5000000000000000
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
|
2003-03-21 02:58:05 +01:00
|
|
|
avg_32
|
|
|
|
---------------------
|
|
|
|
32.6666666666666667
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-07-17 05:05:41 +02:00
|
|
|
-- In 7.1, avg(float4) is computed using float8 arithmetic.
|
|
|
|
-- Round the result to 3 digits to avoid platform-specific results.
|
|
|
|
SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;
|
2000-01-09 04:48:39 +01:00
|
|
|
avg_107_943
|
|
|
|
-------------
|
|
|
|
107.943
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-06-10 07:19:26 +02:00
|
|
|
SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
|
2000-01-09 04:48:39 +01:00
|
|
|
avg_3_4
|
|
|
|
---------
|
|
|
|
3.4
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT sum(four) AS sum_1500 FROM onek;
|
|
|
|
sum_1500
|
|
|
|
----------
|
|
|
|
1500
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT sum(a) AS sum_198 FROM aggtest;
|
|
|
|
sum_198
|
|
|
|
---------
|
|
|
|
198
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT sum(b) AS avg_431_773 FROM aggtest;
|
|
|
|
avg_431_773
|
|
|
|
-------------
|
|
|
|
431.773
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-06-10 07:19:26 +02:00
|
|
|
SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
|
2000-01-09 04:48:39 +01:00
|
|
|
avg_6_8
|
|
|
|
---------
|
|
|
|
6.8
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT max(four) AS max_3 FROM onek;
|
|
|
|
max_3
|
1997-04-29 16:23:51 +02:00
|
|
|
-------
|
2000-01-09 04:48:39 +01:00
|
|
|
3
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT max(a) AS max_100 FROM aggtest;
|
|
|
|
max_100
|
|
|
|
---------
|
|
|
|
100
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
|
|
|
|
max_324_78
|
|
|
|
------------
|
|
|
|
324.78
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT max(student.gpa) AS max_3_7 FROM student;
|
|
|
|
max_3_7
|
|
|
|
---------
|
|
|
|
3.7
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT count(four) AS cnt_1000 FROM onek;
|
|
|
|
cnt_1000
|
|
|
|
----------
|
|
|
|
1000
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT count(DISTINCT four) AS cnt_4 FROM onek;
|
|
|
|
cnt_4
|
|
|
|
-------
|
|
|
|
4
|
|
|
|
(1 row)
|
|
|
|
|
2002-11-21 01:42:20 +01:00
|
|
|
select ten, count(*), sum(four) from onek
|
|
|
|
group by ten order by ten;
|
2000-01-09 04:48:39 +01:00
|
|
|
ten | count | sum
|
|
|
|
-----+-------+-----
|
|
|
|
0 | 100 | 100
|
|
|
|
1 | 100 | 200
|
|
|
|
2 | 100 | 100
|
|
|
|
3 | 100 | 200
|
|
|
|
4 | 100 | 100
|
|
|
|
5 | 100 | 200
|
|
|
|
6 | 100 | 100
|
|
|
|
7 | 100 | 200
|
|
|
|
8 | 100 | 100
|
|
|
|
9 | 100 | 200
|
1999-12-13 02:27:21 +01:00
|
|
|
(10 rows)
|
|
|
|
|
2002-11-21 01:42:20 +01:00
|
|
|
select ten, count(four), sum(DISTINCT four) from onek
|
|
|
|
group by ten order by ten;
|
2000-01-09 04:48:39 +01:00
|
|
|
ten | count | sum
|
|
|
|
-----+-------+-----
|
|
|
|
0 | 100 | 2
|
|
|
|
1 | 100 | 4
|
|
|
|
2 | 100 | 2
|
|
|
|
3 | 100 | 4
|
|
|
|
4 | 100 | 2
|
|
|
|
5 | 100 | 4
|
|
|
|
6 | 100 | 2
|
|
|
|
7 | 100 | 4
|
|
|
|
8 | 100 | 2
|
|
|
|
9 | 100 | 4
|
1999-12-13 02:27:21 +01:00
|
|
|
(10 rows)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT newavg(four) AS avg_1 FROM onek;
|
2003-03-21 02:58:05 +01:00
|
|
|
avg_1
|
|
|
|
--------------------
|
|
|
|
1.5000000000000000
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT newsum(four) AS sum_1500 FROM onek;
|
|
|
|
sum_1500
|
|
|
|
----------
|
|
|
|
1500
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT newcnt(four) AS cnt_1000 FROM onek;
|
|
|
|
cnt_1000
|
|
|
|
----------
|
|
|
|
1000
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2003-06-06 17:04:03 +02:00
|
|
|
-- test for outer-level aggregates
|
|
|
|
-- this should work
|
|
|
|
select ten, sum(distinct four) from onek a
|
|
|
|
group by ten
|
|
|
|
having exists (select 1 from onek b where sum(distinct a.four) = b.four);
|
|
|
|
ten | sum
|
|
|
|
-----+-----
|
|
|
|
0 | 2
|
|
|
|
2 | 2
|
|
|
|
4 | 2
|
|
|
|
6 | 2
|
|
|
|
8 | 2
|
|
|
|
(5 rows)
|
|
|
|
|
|
|
|
-- this should fail because subquery has an agg of its own in WHERE
|
|
|
|
select ten, sum(distinct four) from onek a
|
|
|
|
group by ten
|
|
|
|
having exists (select 1 from onek b
|
|
|
|
where sum(distinct a.four + b.four) = b.four);
|
2003-07-19 22:20:53 +02:00
|
|
|
ERROR: aggregates not allowed in WHERE clause
|