relational databases tuples... things like: (a,b,c,d,e,d,e,g) relations are sets of tuples select : filter tuples based on some condition project: (a,b,c,d) => (a,c) join: (userid,name), (userid,email) => (userid,name,email) SQL : structured query language DDL: define structure: data definition language drop table blah; create table blah(blahid bigint, name varchar(50)) DML: data manipulation language CRUD: create retrieve update delete insert blah(blahid,name) values (1,'blah'); update blah set name='glah' where blahid=1; select blahid,name from blah where blahid=1; delete blah where blahid=1; drop table customer; create table customer ( custid bigint, fname varchar(20), lname varchar(20), email varchar(60), dob date, street1 varchar(50), street2 varchar(50), city varchar(50), state varchar(2), zip varchar(5) ); -- get emails of customers born after 2000. select distinct email from customer where dob>=cast('2000-01-01' as date) select distinct email from customer where dob>=to_date('2000-01-01','YYYY-MM-DD') --first, lets get domain name -- get counts by domain name select a.*, substring(email,position('@' in email),1000) dm from customer --then there's another set of functions: --aggregates -- count customers in NY select count(*) from customer where state='NY' -- count customers in NY who were born after 2000. select count(*) from customer where state='NY' and dob>=cast('2000-01-01' as date) -- count emails of customers select count(email) emailcnt, count(*) cnt from customer --get count of customers by state select state,count(*) from customer group by state ---if want to order by count, descending select state,count(*) from customer group by state order by 2 desc; -- get counts by domain name select substring(email,position('@' in email),1000) dn, count(*) from customer group by substring(email,position('@' in email),1000) --- cleaner way for this: with custwithdomain as ( select a.*, substring(email,position('@' in email),1000) dn from customer a ) select dn,count(*) from custwithdomain group by dn order by 2 desc; --find the minimum and maximum dob select min(dob) mindob, max(dob) maxdob from customer ---find average age by state select a.*, DATEDIFF(year, dob, cast(now() as date)) age from customer a -- select state, avg(DATEDIFF(year, dob, cast(now() as date))) avgage from customer a group by state order by 2 desc ---what's the age distribution of customers with custage as ( select a.*, DATEDIFF(year, dob, cast(now() as date)) age from customer a ), dcust as ( select a.*, cast(age/10 as int) grp1, case when age < 32 then 'YNG' when age < 55 then 'MAG' when age < 70 then 'ELD' else 'VELD' end lbl from custage ) select grp1,count(*) from dcust group by grp1 order by 2 desc ---age group distribution by state. with custage as ( select a.*, DATEDIFF(year, dob, cast(now() as date)) age from customer a ), dcust as ( select a.*, cast(age/10 as int) grp1, case when age < 32 then 'YNG' when age < 55 then 'MAG' when age < 70 then 'ELD' else 'VELD' end lbl from custage ) select state,grp1,count(*) from dcust group by state,grp1 order by 3 desc --- count by state, how many in each age group category. --- state, YNGcnt, MAGcnt, ELDcnt, VELDcnt with custage as ( select a.*, DATEDIFF(year, dob, cast(now() as date)) age from customer a ), dcust as ( select a.*, cast(age/10 as int) grp1, case when age < 32 then 'YNG' when age < 55 then 'MAG' when age < 70 then 'ELD' else 'VELD' end lbl from custage ) select state, sum(case when lbl='YNG' then 1 else 0 end) YNGcnt, sum(case when lbl='MAG' then 1 else 0 end) MAGcnt, sum(case when lbl='ELD' then 1 else 0 end) ELDcnt, sum(case when lbl='VELD' then 1 else 0 end) VELDcnt from dcust group by state ---library create table liblog( liblogid bigint, tim timestamp, bookid bigint, custid bigint, event_type varchar(1) ) create table book ( bookid bigint, title varchar(100), isbn varchar(30), ) --event_type: N is new book, D is destroyed book, -- B is borrowed, R is returned. ---how many times has bookid=124 been borrowed? select count(*) from liblog where bookid=124 and event_type='B' --- how many books are in the library? --- (count multiple copies as separate books) select count(*) from liblog where event_type='N' --- how many unique books are in the library? select count(distinct bookid) from liblog where event_type='N' --- how many books are currently borrowed? select sum(case when event_type='B' then 1 when event_type='R' then -1 else 0 end) cnt from liblog where event_type in ('B','R') --- is there a copy of book 123 available --- to borrow right now? select sum(case when event_type in ('N','R') then 1 when event_type in ('B','D') then -1) cnt from liblog where bookid=123 ---was there a copy of book 123 available ---to borrow last monday? select sum(case when event_type in ('N','R') then 1 when event_type in ('B','D') then -1) cnt from liblog where bookid=123 and tim<=cast('2018-09-10' as date) ---order days by borrowing volume (biggest first). select cast(tim as date) dt,count(*) from liblog where event_type='B' group by cast(tim as date) order by 2 desc; --find all customers who need to return a book select custid from liblog where event_type in ('B','R') group by custid having sum(case when event_type in ('R') then -1 when event_type in ('B') then 1) > 0 ---borrowing window is 2 weeks. ---find all customers who are overdue to return ---the book. (simplify a bit; for now). with bevens as ( select custid,bookid, max(case when event_type='B' then tim else null end) btim max(case when event_type='R' then tim else null end) rtim from liblog group by custid,bookid ) select custid,bookid,btim from bevents where (rtim is null or btim > rtim) and DATEDIFF(day,cast(btim as date), cast(now() as date)) > 14 with bevens as ( select custid,bookid, max(case when event_type='B' then tim else null end) btim max(case when event_type='R' then tim else null end) rtim from liblog group by custid,bookid ), overdueinfo as ( select custid,bookid,btim from bevents where (rtim is null or btim > rtim) and DATEDIFF(day,cast(btim as date), cast(now() as date)) > 14 ) select b.fname,b.lname,b.email,c.title,a.btim from overdueinfo a inner join customer b on a.custid=b.custid inner join book c on a.bookid =c.bookid
Brooklyn Campus Library - LIU, LLC x Ogbonnayajrakpara, LLC
After BCLC HQ, LLC severed ties with OGBONNAYAJRAKPARA, LLC, Brooklyn Campus Library - LIU, LLC gained a new partnership with OGBONNAYAJRAKPARA, LLC. I am pleased and honored that we are doing business together and we will revolutionize the business industry.
Comments
Post a Comment