1> /* In-class practice exercises, 10/21/1999 (Q.1-5) */ 2> /* */ 3> use pubs2 1> /* */ 2> /* Q.1 Check the results of the four SQL statements on pp. */ 3> /* 157-158 (top statement) by including avg(price). */ 4> /* */ 5> select count(price), sum(price), avg(price) 6> from titles ----------- ------------------------ ------------------------ 16 236.26 14.77 (1 row affected) 1> /* */ 2> select count(price), sum(distinct price), avg(price) 3> from titles ----------- ------------------------ ------------------------ 16 161.35 14.77 (1 row affected) 1> /* */ 2> select count(distinct price), sum(price), avg(price) 3> from titles ----------- ------------------------ ------------------------ 11 236.26 14.77 (1 row affected) 1> /* */ 2> select count(distinct price), sum(distinct price), avg(price) 3> from titles ----------- ------------------------ ------------------------ 11 161.35 14.77 (1 row affected) 1> /* Results of 1st and 4th queries are correct; others are not. */ 2> /* */ 3> /* Q.2. List all the different states where authors live; */ 4> /* then again, sorted by city. Why are the results different? */ 5> /* */ 6> select distinct state 7> from authors state ----- CA IN KS MD MI OR TN UT (8 rows affected) 1> /* */ 2> select distinct state 3> from authors 4> order by city state ----- MI CA OR CA IN KS CA TN CA CA MD UT CA CA CA CA (16 rows affected) 1> /* */ 2> /* When "ordering by", that column is included implicitly */ 3> /* in the select list. "Distinct" finds each different */ 4> /* state-city combination. */ 5> /* */ 6> /* Q.3. Use the salesdetail table for these questions: */ 7> /* a. How many copies of each title have been ordered, */ 8> /* regardless of which store? */ 9> /* b. How many copies of any title has each store ordered? */ 10> /* */ 11> select title_id, sum(qty) as Copies_Sold 12> from salesdetail 13> group by title_id title_id Copies_Sold -------- ----------- BU1032 4095 BU1111 3876 BU2075 18722 BU7832 4095 MC2222 2032 MC3021 22246 PC1035 8780 PC8888 4095 PS1372 375 PS2091 2045 PS2106 111 PS3333 4072 PS7777 3336 TC3218 375 TC4203 15096 TC7777 4095 (16 rows affected) 1> /* */ 2> select stor_id, sum(qty) as Copies_Sold 3> from salesdetail 4> group by stor_id stor_id Copies_Sold ------- ----------- 5023 82674 6380 2430 7066 2430 7067 2900 7131 2097 7896 1182 8042 3733 (7 rows affected) 1> /* */ 2> /* Q.4. More on grouping with aggregate functions: */ 3> /* a. Show the average advance and price set by each publisher */ 4> /* for each type of book. */ 5> /* b. If not done already, eliminate nulls from results in 4a. */ 6> /* c. Sort results from 4b in order of increasing avg advance. */ 7> /* d. Same as c, but only books with price > average price. */ 8> /* */ 9> select pub_id, type, avg(advance) as AvgAdv, avg(price) as AvgPrice 10> from titles 11> group by pub_id, type pub_id type AvgAdv AvgPrice ------ ------------ ------------------------ ------------------------ 0736 business 10,125.00 2.99 0736 psychology 3,568.75 11.48 0877 UNDECIDED NULL NULL 0877 mod_cook 7,500.00 11.49 0877 psychology 7,000.00 21.59 0877 trad_cook 6,333.33 15.96 1389 business 5,000.00 17.31 1389 popular_comp 7,500.00 21.48 (8 rows affected) 1> /* */ 2> select pub_id, type, avg(advance) as AvgAdv, avg(price) as AvgPrice 3> from titles 4> where (advance is not null or price is not null) 5> group by pub_id, type pub_id type AvgAdv AvgPrice ------ ------------ ------------------------ ------------------------ 0736 business 10,125.00 2.99 0736 psychology 3,568.75 11.48 0877 mod_cook 7,500.00 11.49 0877 psychology 7,000.00 21.59 0877 trad_cook 6,333.33 15.96 1389 business 5,000.00 17.31 1389 popular_comp 7,500.00 21.48 (7 rows affected) 1> /* */ 2> select pub_id, type, avg(advance) as AvgAdv, avg(price) as AvgPrice 3> from titles 4> where (advance is not null or price is not null) 5> group by pub_id, type 6> order by 3 pub_id type AvgAdv AvgPrice ------ ------------ ------------------------ ------------------------ 0736 psychology 3,568.75 11.48 1389 business 5,000.00 17.31 0877 trad_cook 6,333.33 15.96 0877 psychology 7,000.00 21.59 0877 mod_cook 7,500.00 11.49 1389 popular_comp 7,500.00 21.48 0736 business 10,125.00 2.99 (7 rows affected) 1> /* */ 2> select pub_id, type, avg(advance) as AvgAdv, avg(price) as AvgPrice 3> from titles 4> group by pub_id, type 5> having (advance is not null or price is not null) 6> and price > avg(price) 7> order by avg(advance) pub_id type AvgAdv AvgPrice ------ ------------ ------------------------ ------------------------ 0736 psychology 3,568.75 11.48 1389 business 5,000.00 17.31 1389 business 5,000.00 17.31 0877 trad_cook 6,333.33 15.96 0877 mod_cook 7,500.00 11.49 1389 popular_comp 7,500.00 21.48 (6 rows affected) 1> /* */ 2> /* Q.5. Which title has the maximum total sales and how many */ 3> /* copies of that title have sold? */ 4> /* */ 5> select title_id, title, total_sales 6> from titles 7> having total_sales = max(total_sales) title_id title total_sales -------- ------------------------------------------------------------------------ -------- ----------- MC3021 The Gourmet Microwave 22246 (1 row affected)