CREATETABLE YELP_USER (
Yelp_ID VARCHAR(10)PRIMARYKEY,
Email VARCHAR(30)NOTNULL,
FN VARCHAR(10)NOTNULL,
LN VARCHAR(10)NOTNULL,
DOB DATENOTNULL,
BirthPlace VARCHAR(30)NOTNULL,
Gender CHARNOTNULL);CREATETABLE BUNCATEGORY (
Category_ID VARCHAR(10)PRIMARYKEY,
CategoryNamne VARCHAR(30)NOTNULL);CREATETABLE BUSINESS (
Business_ID VARCHAR(10)PRIMARYKEY,
BusinessName VARCHAR(50)NOTNULL,
City VARCHAR(20)NOTNULL,
StateName VARCHAR(20)NOTNULL,
Phone VARCHAR(14)NOTNULL,
Category_ID VARCHAR(10)NOTNULL,
OPENED CHARNOTNULL,FOREIGNKEY(Category_ID)REFERENCES BUNCATEGORY(Category_ID)ONDELETESETNULL);CREATETABLE REVIEWS (
Review_ID VARCHAR(10)PRIMARYKEY,
Rating Number(1)NOTNULL,
Author VARCHAR(10)NOTNULL,
Publish_Date DATENOTNULL,
Rec_NotREC CHARNOTNULL,
Business_ID VARCHAR(10)NOTNULL,
Votes_Funny NUMBER NOTNULL,
Votes_Cool NUMBER NOTNULL,
Votes_Useful NUMBER NOTNULL,FOREIGNKEY(Author)REFERENCES YELP_USER(Yelp_ID)ONDELETESETNULL,FOREIGNKEY(Business_ID)REFERENCES BUSINESS(Business_ID)ONDELETESETNULL);
Queries
Get the businesses in San Jose, CA that are still “in business”. Results should be sorted by review counts in descending order. Return for the top 7 businesses, the business id, name, review count, and average rating of the business.
SELECT*FROM(SELECT B.Business_ID, B.BusinessName,COUNT(B.Business_ID)as count,AVG(R.Rating)FROM BUSINESS B, REVIEWS R
WHERE B.City ='San Jose'AND B.StateName ='CA'AND B.OPENED ='T'AND R.Business_ID = B.Business_ID
GROUPBY B.Business_ID, B.BusinessName
ORDERBY count DESC)WHERE ROWNUM <=7;
Get the review counts for businesses in each business category. Results should be sorted by the review counts in descending order.
SELECT B.Category_ID, B.Business_ID,COUNT(B.Business_ID)as CN
FROM BUSINESS B, REVIEWS R
WHERE B.Business_ID = R.Business_ID
GROUPBY B.Business_ID, B.Category_ID
ORDERBY CN DESC;
Find the average rating across all reviews written by a particular user.
SELECT Y.Yelp_ID, nvl(AVG(R.Rating),0)FROM REVIEWS R, YELP_USER Y
WHERE R.Author(+)= Y.Yelp_ID
GROUPBY Y.Yelp_ID;
Get the businesses in San Jose, CA that have been reviewed by more than 5 elite users. Users who have written more than 10 reviews are called elite users. Results should be ordered by the elite user count in descending order. Return for the top 5 businesses, the business id, business name, business review count, average rating, and the count of the `elite’ users for the particular business.
SELECT*FROM(SELECT T.Business_ID, TT.BusinessName, T.Review_Count, T.Avg_Rating, TT.elite
FROM(SELECT R.Business_ID as Business_ID,COUNT(R.Review_ID)as Review_Count,AVG(R.Rating)as Avg_Rating
FROM Reviews R
WHERE R.Business_ID in(SELECT B.Business_ID
FROM BUSINESS B, REVIEWS R
WHERE B.City ='San Jose'AND B.StateName ='CA'AND R.Business_ID = B.Business_ID
AND R.Author in(SELECT T1.Author
FROM(SELECT R.Author Author,COUNT(R.Review_ID)as CN
FROM Reviews R
GroupBy R.Author
) T1
WHERE CN >10)GROUPBY B.Business_ID
HAVINGCOUNT(R.Author)>5)GROUPBY(R.Business_ID)) T,(SELECT B.Business_ID as Business_ID, B.BusinessName as BusinessName,COUNT(R.Author)as elite
FROM BUSINESS B, REVIEWS R
WHERE B.City ='San Jose'AND B.StateName ='CA'AND R.Business_ID = B.Business_ID
AND R.Author in(SELECT T2.Author
FROM(SELECT R.Author Author,COUNT(R.Review_ID)as CN
FROM Reviews R
GroupBy R.Author
) T2
WHERE CN >10)GROUPBY B.Business_ID,B.BusinessName
HAVINGCOUNT(R.Author)>5) TT
WHERE TT.Business_ID = T.Business_ID
ORDERBY TT.elite
)WHERE ROWNUM <=5;
Get the businesses in San Jose, CA that have the highest percentage of reviews with rating of 5, and have been reviewed at least 5 times. Results should be ordered by the percentage in descending order. Return for the top 5 businesses, the business id, business name, review count, and percentage of reviews with rating of 5.
SELECT*FROM(SELECT T.Business_ID,COUNT(T.BUSINESS_ID),((T.five/COUNT(T.BUSINESS_ID))*100)percentFROM(SELECT R.Business_ID,COUNT(R.Business_ID)as five
FROM REVIEWS R
WHERE R.Rating =5GROUPBY R.Business_ID
) T, Reviews R
WHERE T.Business_ID = R.Business_ID
AND T.Business_ID in(SELECT B.Business_ID
FROM BUSINESS B, REVIEWS R
WHERE B.City ='San Jose'AND B.StateName ='CA'AND B.Business_ID = R.Business_ID
GROUPBY B.Business_ID
HAVINGCOUNT(R.Review_ID)>=5)GROUPBY T.Business_ID, T.five
ORDERBYpercentDESC)WHERE ROWNUM <=5;
Find top two businesses, which have highest average ratings in each business category. For each business, list business id, business name and business category name.
SELECT TT.business_ID, TT.BusinessName, TT.categoryname
FROM(SELECT T.Business_ID as business_ID, T.BusinessName as businessname, T.rate, C.CategoryNamne as categoryname,
ROW_NUMBER()OVER(PARTITIONBY T.Category_ID Orderby T.rate DESC)AS ranking
FROM(SELECT B.Business_ID Business_ID, B.BusinessName BusinessName, B.Category_ID Category_ID,AVG(R.Rating)as rate
FROM BUSINESS B, REVIEWS R
WHERE B.Business_ID = R.Business_ID
GROUPBY B.Business_ID, B.BusinessName, B.Category_ID
) T, BUNCATEGORY C
WHERE T.Category_ID = C.Category_ID
) TT
WHERE ranking <=2;
Find the oldest user who never reviewed any businesses.
SELECT*FROM(SELECT Y.Yelp_ID, Y.DOB as birthday
FROM YELP_USER Y
WHERE Y.Yelp_ID notin(SELECT R.Author
FROM Reviews R
GROUPBY R.Author
)ORDERBY birthday
)WHERE ROWNUM <=1;
Find every business in CA that has the word “Coffee” in its name.
SELECT B.BUSINESS_ID, B.BusinessName
FROM BUSINESS B
WHERE StateName ='CA'AND B.BusinessName LIKE'%Coffee%';
List all 5-star businesses that have been reviewed by any users between the ages of 15 and A 5-star business is a business which has an average review rating of 5.
SELECT R.Business_ID, R.Author
FROM Reviews R
WHERE R.Author in(SELECT Y.Yelp_ID
FROM YELP_USER Y
WHERE(months_between(current_date, Y.DOB)/12)>15AND(months_between(current_date, Y.DOB)/12)<25)GROUPBY R.Business_ID, R.Author
HAVINGAVG(R.Rating)=5;
List users that have been to at least 3 distinct states. Order by number of states traveled to (decreasing), break ties with user id (increasing). For each user, list his/her user id, name and list of states traveled to.
SELECT Y.Yelp_ID, Y.FN, Y.LN, T.StateName
FROM(SELECT R.Author as Author, B.StateName as StateName
FROM REVIEWS R, BUSINESS B
WHERE R.Business_ID = B.Business_ID
AND R.Author in(SELECT T.Yelp_User Yelp_User
FROM(SELECT R.Author as Yelp_User, B.StateName as StateName
FROM REVIEWS R, BUSINESS B
WHERE R.Business_ID = B.Business_ID
GROUPBY R.Author, B.StateName
) T
GROUPBY T.Yelp_User
HAVINGCOUNT(T.Yelp_User)>=3)GROUPBY R.Author, B.StateName
) T, YELP_USER Y
WHERE T.Author = Y.Yelp_ID
ORDERBY(Y.Yelp_ID);
SQL QueryTablesQueriesTablesCREATE TABLE YELP_USER ( Yelp_ID VARCHAR(10) PRIMARY KEY, Email VARCHAR(30) NOT NULL, FN VARCHAR(10) NOT NULL, LN VARCHAR(10) NOT NULL, DOB DATE NOT NULL, BirthPlace VARCHAR(30) NOT NULL, Gender CHA