select [distinct] expression {, expression} from tablename [corr_name] {, tablename [corr_name]} [where search_condition] [group by column {, column}] [having search_condition]
(1) For each (aid,pid) pair get the sum of the orders aid has placed for pid. SQL> select pid, aid, sum(qty) TOTAL from orders group by pid, aid; PID AID TOTAL --- --- ---------- p01 a01 3000 p01 a06 1800 p02 a02 400 p03 a03 1000 p03 a05 800 ... ... 12 rows selected.
(2) Get agent name, agent id, product name, product id, together with total quantity each agent supplies of that product to customers "c002" and "c003". SQL> select aname, a.aid, pname, p.pid, sum(qty) from orders x, products p, agents a where x.pid = p.pid and x.aid = a.aid and x.cid in ('c002', 'c003') group by a.aid, a.aname, p.pid, p.pname; ANAME AID PNAME PID SUM(QTY) ------------- --- ------------- --- ---------- Brown a03 razor p03 1000 Otasi a05 razor p03 800 Brown a03 pencil p05 2400 Note: The where clause is evaluated before groups are formed.
(3) Get product ids and total quantity ordered for each product when the total exceeds 1000. SQL> select pid, aid, sum(qty) TOTAL from orders group by pid, aid having sum(qty) > 1000; PID AID TOTAL --- --- ---------- p01 a01 3000 p01 a06 1800 p05 a03 2400
(4) Get pids of products that are ordered by at least two customers. SQL> select pid from orders group by pid having count(distinct cid) >= 2; PID --- p01 p03 p05 p07