mirror of
https://github.com/postgres/postgres.git
synced 2026-04-05 17:25:55 -04:00
100 lines
3.3 KiB
SQL
100 lines
3.3 KiB
SQL
---------------------------------------------------------------------------
|
|
--
|
|
-- group.sql-
|
|
-- test GROUP BY (with aggregates)
|
|
--
|
|
--
|
|
-- Copyright (c) 1994-5, Regents of the University of California
|
|
--
|
|
-- $Id: group.sql,v 1.1.1.1 1996/07/09 06:22:30 scrappy Exp $
|
|
--
|
|
---------------------------------------------------------------------------
|
|
|
|
create table G (x int4, y int4, z int4);
|
|
insert into G values (1, 2, 6);
|
|
insert into G values (1, 3, 7);
|
|
insert into G values (1, 3, 8);
|
|
insert into G values (1, 4, 9);
|
|
insert into G values (1, 4, 10);
|
|
insert into G values (1, 4, 11);
|
|
insert into G values (1, 5, 12);
|
|
insert into G values (1, 5, 13);
|
|
|
|
select x from G group by x;
|
|
select y from G group by y;
|
|
select z from G group by z;
|
|
select x, y from G group by x, y;
|
|
select x, y from G group by y, x;
|
|
select x, y, z from G group by x, y, z;
|
|
|
|
-- mixed target list (aggregates and group columns)
|
|
select count(y) from G group by y;
|
|
select x, count(x) from G group by x;
|
|
select y, count(y), sum(G.z) from G group by y;
|
|
select sum(G.x), sum(G.y), z from G group by z;
|
|
select y, avg(z) from G group by y;
|
|
|
|
-- group attr not in target list
|
|
select sum(x) from G group by y;
|
|
select sum(x), sum(z) from G group by y;
|
|
select sum(z) from G group by y;
|
|
|
|
-- aggregates in expressions
|
|
select sum(G.z)/count(G.z), avg(G.z) from G group by y;
|
|
|
|
-- with qualifications
|
|
select y, count(y) from G where z < 11 group by y;
|
|
select y, count(y) from G where z > 9 group by y;
|
|
select y, count(y) from G where z > 8 and z < 12 group by y;
|
|
select y, count(y) from G where y = 4 group by y;
|
|
select y, count(y) from G where y > 10 group by y;
|
|
|
|
-- with order by
|
|
select y, count(y) as c from G group by y order by c;
|
|
select y, count(y) as c from G group by y order by c, y;
|
|
select y, count(y) as c from G where z > 20 group by y order by c;
|
|
-- just to make sure we didn't screw up order by
|
|
select x, y from G order by y, x;
|
|
|
|
-- with having
|
|
-- HAVING clause is not implemented yet
|
|
--select count(y) from G having count(y) > 1
|
|
--select count(y) from G group by y having y > 3
|
|
--select y from G group by y having y > 3
|
|
--select y from G where z > 10 group by y having y > 3
|
|
--select y from G group by y having y > 10
|
|
--select count(G.y) from G group by y having y > 10
|
|
--select y from G where z > 20 group by y having y > 3
|
|
|
|
create table H (a int4, b int4);
|
|
insert into H values (3, 9)
|
|
insert into H values (4, 13);
|
|
create table F (p int4);
|
|
insert into F values (7)
|
|
insert into F values (11);
|
|
|
|
-- joins
|
|
select y from G, H where G.y = H.a group by y;
|
|
select sum(b) from G, H where G.y = H.a group by y;
|
|
select y, count(y), sum(b) from G, H where G.y = H.a group by y;
|
|
select a, sum(x), sum(b) from G, H where G.y = H.a group by a;
|
|
select y, count(*) from G, H where G.z = H.b group by y;
|
|
select z, sum(y) from G, H, F where G.y = H.a and G.z = F.p group by z;
|
|
select a, avg(p) from G, H, F where G.y = H.a and G.z = F.p group by a;
|
|
|
|
-- just aggregates
|
|
select sum(x) from G, H where G.y = H.a;
|
|
select sum(y) from G, H where G.y = H.a;
|
|
select sum(a) from G, H where G.y = H.a;
|
|
select sum(b) from G, H where G.y = H.a;
|
|
select count(*) from G group by y;
|
|
|
|
insert into G (y, z) values (6, 14);
|
|
insert into G (x, z) values (2, 14);
|
|
select count(*) from G;
|
|
select count(x), count(y), count(z) from G;
|
|
select x from G group by x;
|
|
select y, count(*) from G group by y;
|
|
|
|
--
|
|
drop table G, H, F;
|