CS 3630 Database Design and Implementation
Due Wednesday, April 4, by 5 PM Class dropbox on K: drive Project Phase II Due Wednesday, April 4, by 5 PM Class dropbox on K: drive
Assignment 8 Due Friday, April 6, by 5 PM
Aggregate Functions: Produce a single value from a set Count Max Min Sum Avg …
SQL Aggregate Functions -- Max, Min, Avg, Sum Select Max(price), Min(price), Avg(price) From room;
Formatting -- Formatting Col MaxPrice format $99.00 heading "Max Price" Select Max(price) MaxPrice, Min(price) MinPrice, Avg(price) AvgPrice From room;
Formatting -- Formatting Col MaxPrice format $999.00 heading "Max Price" Col MinPrice format $999.00 heading "Min Price" Col AvgPrice format $999.00 heading "Avg Price" Select Max(price) MaxPrice, Min(price) MinPrice, Avg(price) AvgPrice From room;
SQL Aggregate Functions -- Room_No char(4) Select Max(room_no), Min(room_no) From room;
SQL Aggregate Functions // Room_No char(4) // No average or sum on strings! Select Avg(room_no), Sum(room_no) From room;
Max/Min Dates Col Min(Date_From) Format a20 Heading 'Earlist Date_From' Col Max(Date_To) Format a20 Heading 'Latest Date_To' Select Min(Date_From), Max(Date_To) From Booking;
Max/Min Dates col "Earliest Date from" format a20 col "Latest Date To" format a20 Select To_Char(Min(Date_From), 'Mon dd yyyy') "Earliest Date from", To_Char(Max(Date_To), 'Mon dd yyyy') "Latest Date To" From Booking;
Incorrect! col "Earliest Date from" format a20 col "Latest Date To" format a20 Select Min(To_Char(Date_From, 'Mon dd yyyy')) "Earliest Date from", Max(To_Char(Date_To, 'Mon dd yyyy')) "Latest Date To" From Booking;
Count -- Count(*): number of all records -- count(hotel_no): number of Hotel_No -- Count(unique Hotel_No): -- number of distinct Hotel_No Select count(*), count(hotel_no), count(unique hotel_no) From room; Pause Select * From room Order by hotel_no;
Count -- Does not count null values select count(*), count(address) From guest; Select * From guest;
Aggregate Functions with Distinct/Unique Select Avg(Price) From room; -- With Distinct Select Avg(Distinct Price) Select Avg(Unique Price) Select * From room Order by price;
Aggregate Functions with Where -- With where clause -- Avg is applied after Where clause col "Average Price" format $999.00 Select Avg(Price) "Average Price" From room Where rtype = 'Family'; Select Avg(Price) "Average Price" Where rtype = 'Single'; Where rtype = 'Double';
Aggregate Functions with Where -- With where clause -- Avg is applied after Where clause Select 'Average Price of Family rooms: ', Avg(Price) From room Where rtype = 'Family'; Pause Prompt Run time error! Select rtype, Avg(Price)
One record for each group. Group By Clause Count, Avg Select Group By Count, Avg Count, Avg One record for each group.
Group By Select Avg(Price) From room Group by rtype; Select rtype, Avg(Price)
Group By Clause For each hotel, display Hotel_No with the number of rooms. Select Hotel_No, Count(*) From Room Group By Hotel_No; Hotel_No Room_No Price H01 R001 30 R002 35 H05 R003 40 R103 45 R101 50 Hotel_No Room_No Price H01 R001 30 R002 35 R103 45 H05 R003 40 R101 50 Hotel_No Count H01 3 H05 2
What can be selected with Group By Clause Can select Hotel_No, the group by field Can select aggregate functions on any other fields such as Max(Room_No) or Avg(Price) Hotel_No Room_No Price H01 R001 30 R002 35 R103 45 H05 R003 40 R101 50 Hotel_No Room_No Price H01 R001 30 R002 35 R103 45 H05 R003 40 R101 50 Hotel_No Max(Room_No) Avg(Price) H01 R103 36.67 H05 R101 45
What CANNOT be selected with Group By Clause Cannot select other fields (without aggregate function) not in the group by clause ORA-00979: not a GROUP BY expression Hotel_No Room_No Price H01 R001 30 R002 35 R103 45 H05 R003 40 R101 50 Hotel_No Room_No Price H01 R001 30 R002 35 R103 45 H05 R003 40 R101 50 Hotel_No Room_No Price H01 ? H05
Group By Clause ? Select Group By ? ? One record for each group! What can be selected? Aggregate functions Group by fields
One Record for Each Group Select Hotel_no, Count(*), Max(Price) From Room Group by Hotel_No; Select Hotel_no, Room_No, rtype, Price -- not a Group By expression
Group by More Than One Field Select Hotel_No, rtype, Max(Price) From Room Group By Hotel_no, rtype Order By Hotel_no, rtype
Order After Group by Select Hotel_no, Count(*), Max(Price) From Room Group by Hotel_No Order by Count(*);
Group By Clause ? Select Group By ? ? What if we don’t want all groups? Having on groups
Having to select groups Select Hotel_no, Count(*), Max(Price) From Room Group by Hotel_No; Pause Group by Hotel_No Having Count(*) >= 5;
Group By Where before Group by to select records Having after Group by to select groups Select Hotel_no, Count(*), Max(Price) From Room Where rtype = 'Single' Group by Hotel_No Having Max(Price) < 100;
Where before Group by to select records Having after Group by From Room Order by rtype; pause Where rtype = 'Single'; Select Hotel_no, Count(*), Max(Price) Where rtype = 'Single' Group by Hotel_No; Pause Group by Hotel_No Having Max(Price) < 100; Where before Group by to select records Having after Group by to select groups Let’s do it in 4 steps: From Where Group By Having
Where before Group by Having after Group by Order by last Select Hotel_no, Count(*), Max(Price) From Room Where rtype in ('Double', 'Single') Group by Hotel_No Order by Count(*); pause Having Count(*) > 3 Order by Count(*) desc;
Group By Clause Execution Order Where (condition on records) Group by Having (condition on groups) Order by (Select)
Script File Style Prompt Prompt 9. Prompt For each hotel that has more than Prompt one Single room, list hotel number Prompt with number of Single rooms the hotel Prompt has and the highest price of Prompt such rooms of the hotel. Col Count(*) Format 99 heading "Single Rooms" Col Max(Price) format $999.00 heading "Max Price" Select Hotel_no, Count(*), Max(Price) From Room Where rtype = 'Single' Group by Hotel_No Having Count(*) > 1 Order by Count(*); pause
Assignment 8 Due Friday, April 6 Should work for any table instance Run against my tables Should insert more records to test (Don’t include insert commands!) Example Quiz 3 Hands-On Wednesday, April 7 Create Script file to Drop tables Create tables Column/Table constraints Insert records
Quiz 3 Wednesday, April 11 Run Script file to Drop/Create tables, insert records Create Script file to query database Hands-on: in Lab 206 D2L