SQL supports count, sum, avg, max, min functions.
(1) Get total dollar amounts of all orders. SQL> select sum(dollars) from orders; SUM(DOLLARS) ------------ 9802
(2) Get total quantity of product "p03" that has been ordered. SQL> select sum(qty) TOTAL from orders where pid = 'p03'; TOTAL ---------- 2400
(3) Get total number of customers. SQL> select count(cid) from customers; COUNT(CID) ---------- 5 Alternate solution: SQL> select count(*) from customers; COUNT(*) ---------- 5
(4) Get number of cities in which customers are based. SQL> select count(distinct city) from customers; COUNT(DISTINCTCITY) ------------------- 3 If distinct keyword was not used, we would get an incorrect result: SQL> select count(city) from customers; COUNT(CITY) ----------- 5
(5) Get cid values of customers who have a discount less than the maximum discount. SQL> select cid from customers where discnt < (select max(discnt) from customers); CID ---- c001 c003 c004 c006
(6) Get pids of products ordered by at least two customers. SQL> select p.pid from products p where 2 <= (select count(distinct cid) from orders where pid = p.pid); PID --- p01 p03 p05 p07
(7) Null Values and Aggregate Operations: SQL> insert into customers (cid, cname, city) values ('c007', 'Windix', 'Dallas'); 1 row created. SQL> select * from customers where discnt <= 10 or discnt > 10; CID CNAME CITY DISCNT ---- ------------- -------------------- ---------- c001 Tiptop Duluth 10 c002 Basics Dallas 12 c003 Allied Dallas 8 c004 ACME Duluth 8 c006 ACME Kyoto 0 Newly created row not in result!
SQL> select * from customers where discnt is null; CID CNAME CITY DISCNT ---- ------------- -------------------- ---------- c007 Windix Dallas Newly created row is in result.
All aggregate functions discard null values before evaluation. Get average discount value for customers. SQL> select avg(discnt) from customers; AVG(DISCNT) ----------- 7.6 This discarded the null value before calculating average.