- Notifications
You must be signed in to change notification settings - Fork13
Solutions for SQL 50 Study Plan on LeetCode
ieshreya/sql-50-leetcode
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Solutions forSQL 50 Study Plan on LeetCode
1757 - Recyclable and Low Fat Products
SELECT product_idFROM ProductsWHERE low_fats='Y'AND recyclable='Y'
SELECT nameFROM CustomerWHERE referee_id!=2OR referee_id ISnull
SELECT name, population, areaFROM WORLDWHERE area>=3000000OR population>=25000000
SELECT DISTINCT author_idas idFROM ViewsWHERE viewer_id>=1AND author_id= viewer_idORDER BY author_id
SELECT tweet_idFROM TweetsWHERE length(content)>15
1378 - Replace Employee ID With The Unique Identifier
SELECT unique_id, nameFROM Employees eLEFT JOIN EmployeeUNI euONe.id=eu.id
1068 - Product Sales Analysis I
SELECT product_name, year, priceFROM Sales sLEFT JOIN Product pONs.product_id=p.product_id
1581 - Customer Who Visited but Did Not Make Any Transactions
SELECT customer_id,COUNT(*)as count_no_transFROM VisitsWHERE visit_id NOTIN (SELECT DISTINCT visit_idFROM Transactions)GROUP BY customer_id
SELECTw1.idFROM Weather w1, Weather w2WHERE DATEDIFF(w1.recordDate,w2.recordDate)=1ANDw1.temperature>w2.temperature-- ORSELECTw1.idFROM Weather w1, Weather w2WHEREw1.temperature>w2.temperatureAND SUBDATE(w1.recordDate,1)=w2.recordDate
1661 - Average Time of Process per Machine
SELECT machine_id, ROUND(AVG(end- start),3)AS processing_timeFROM (SELECT machine_id, process_id,MAX(CASE WHEN activity_type='start' THENtimestamp END)AS start,MAX(CASE WHEN activity_type='end' THENtimestamp END)AS endFROM ActivityGROUP BY machine_id, process_id)AS subqGROUP BY machine_id
SELECT name, bonusFROM Employee eLEFT JOIN Bonus bONe.empId=b.empIdWHERE bonus<1000OR bonus ISNULL
1280 - Students and Examinations
SELECTa.student_id,a.student_name,b.subject_name,COUNT(c.subject_name)AS attended_examsFROM Students aJOIN Subjects bLEFT JOIN Examinations cONa.student_id=c.student_idANDb.subject_name=c.subject_nameGROUP BY1,3ORDER BY1,3
570. Managers with at Least 5 Direct Reports
SELECT nameFROM EmployeeWHERE idIN (SELECT managerIdFROM EmployeeGROUP BY managerIdHAVINGCOUNT(*)>=5 )-- ORSELECTa.nameFROM Employee aJOIN Employee bWHEREa.id=b.managerIdGROUP BYb.managerIdHAVINGCOUNT(*)>=5
SELECTs.user_id, ROUND( COALESCE(SUM( CASE WHEN ACTION='confirmed' THEN1 END )/COUNT(*),0),2)AS confirmation_rateFROM Signups sLEFT JOIN Confirmations cONs.user_id=c.user_idGROUP BYs.user_id;
-- odd id, "boring", rating descSELECT*FROM CinemaWHERE id %2<>0AND description<>"boring"ORDER BY ratingDESC
-- avg(selling), round 2SELECTp.product_id, ROUND(SUM(price* units)/SUM(units),2)AS average_priceFROM Prices pLEFT JOIN UnitsSold sONp.product_id=s.product_idAND purchase_date BETWEEN start_dateAND end_dateGROUP BYp.product_id
-- avg(exp_yr), round 2, by projectSELECT project_id, ROUND(AVG(experience_years),2) average_yearsFROM Project pLEFT JOIN Employee eONp.employee_id=e.employee_idGROUP BY project_id
1633. Percentage of Users Attended a Contest
-- % desc, contest_id asc, round 2SELECTr.contest_id, ROUND(COUNT(DISTINCTr.user_id)*100/ (SELECTCOUNT(DISTINCT user_id)FROM Users),2)AS percentageFROM Register rGROUP BYr.contest_idORDER BY percentageDESC,r.contest_idASC;
1211 Queries Quality and Percentage
--quality - avg(rating/position), poor query % - %(rating < 3), round 2SELECT query_name, ROUND(AVG(rating/position),2)AS quality, ROUND(SUM(IF(rating<3,1,0))*100/COUNT(rating),2)AS poor_query_percentageFROM QueriesGROUP BY query_name-- ORSELECT query_name, ROUND(AVG(rating/position),2)AS quality, ROUND(SUM( CASE WHEN rating<3 THEN1 ELSE0 END )*100/COUNT(rating),2)AS poor_query_percentageFROM QueriesGROUP BY query_name
-- month, country, count(trans), total(amt), count(approved_trans), total(amt)SELECT DATE_FORMAT(trans_date,'%Y-%m') month, country,COUNT(state) trans_count,SUM(IF(state='approved',1,0)) approved_count,SUM(amount) trans_total_amount,SUM(IF(state='approved', amount,0)) approved_total_amountFROM TransactionsGROUP BY1,2-- ORSELECT DATE_FORMAT(trans_date,'%Y-%m') month, country,COUNT(state) trans_count,SUM(CASE WHEN state='approved' THEN1 ELSE0 END) approved_count,SUM(amount) trans_total_amount,SUM(CASE WHEN state='approved' THEN amount ELSE0 END) approved_total_amountFROM TransactionsGROUP BY1,2
1174. Immediate Food Delivery II
SELECT ROUND((COUNT(CASE WHENd.order_date=d.customer_pref_delivery_date THEN1 END)/COUNT(*))*100,2) immediate_percentageFROM Delivery dWHEREd.order_date= (SELECTMIN(order_date)FROM DeliveryWHERE customer_id=d.customer_id );-- ORSELECT ROUND(AVG(temp.order_date=temp.customer_pref_delivery_date)*100,2) immediate_percentageFROM (SELECT*, RANK() OVER(partition by customer_idORDER BY order_date) odFROM Delivery) tempWHEREtemp.od=1
WITH login_dateAS (SELECT player_id,MIN(event_date)AS first_loginFROM ActivityGROUP BY player_id),recent_loginAS (SELECT*, DATE_ADD(first_login, INTERVAL1 DAY)AS next_dayFROM login_date)SELECT ROUND((SELECTCOUNT(DISTINCT(player_id))FROM ActivityWHERE (player_id, event_date)IN (SELECT player_id, next_dayFROM recent_login))/ (SELECTCOUNT(DISTINCT player_id)FROM Activity),2)AS fraction
2356. Number of Unique Subjects Taught by Each Teacher
SELECT teacher_id,COUNT(DISTINCT subject_id) cntFROM TeacherGROUP BY teacher_id
1141. User Activity for the Past 30 Days I
SELECT activity_dateas day,COUNT(DISTINCT user_id)AS active_usersFROM ActivityWHERE activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL29 DAY)AND'2019-07-27'GROUP BY activity_date
1070. Product Sales Analysis III
SELECTs.product_id,s.yearAS first_year,s.quantity,s.priceFROM Sales sJOIN (SELECT product_id,MIN(year)AS yearFROM salesGROUP BY product_id ) pONs.product_id=p.product_idANDs.year=p.year-- ORWITH first_year_salesAS (SELECTs.product_id,MIN(s.year)as first_yearFROM Sales sINNER JOIN Product pONs.product_id=p.product_idGROUP BYs.product_id)SELECTf.product_id,f.first_year,s.quantity,s.priceFROM first_year_sales fJOIN Sales sONf.product_id=s.product_idANDf.first_year=s.year
596. Classes More Than 5 Students
SELECT classFROM CoursesGROUP BY classHAVINGCOUNT(student)>=5
SELECT user_id,COUNT(DISTINCT follower_id)AS followers_countFROM FollowersGROUP BY user_idORDER BY user_idASC
SELECT COALESCE( (SELECT numFROM MyNumbersGROUP BY numHAVINGCOUNT(num)=1ORDER BY numDESCLIMIT1),null)AS num
1045. Customers Who Bought All Products
SELECT customer_idFROM CustomerGROUP BY customer_idHAVINGCOUNT(DISTINCT product_key)= (SELECTCOUNT(product_key)FROM Product)
1731. The Number of Employees Which Report to Each Employee
SELECTe1.employee_id,e1.name,COUNT(e2.employee_id) reports_count, ROUND(AVG(e2.age)) average_ageFROM Employees e1, Employees e2WHEREe1.employee_id=e2.reports_toGROUP BYe1.employee_idHAVING reports_count>0ORDER BYe1.employee_id
1789. Primary Department for Each Employee
SELECT employee_id, department_idFROM EmployeeWHERE primary_flag='Y'UNIONSELECT employee_id, department_idFROM EmployeeGROUP BY employee_idHAVINGCOUNT(employee_id)=1-- ORSELECT employee_id,department_idFROM EmployeeWHERE primary_flag='Y'OR employee_idIN (SELECT employee_idFROM employeeGROUP BY employee_idHAVINGCOUNT(department_id)=1 )
SELECT x, y, z, CASE WHEN x+ y> zAND x+ z> yAND y+ z> x THEN'Yes'ELSE'No' ENDAS triangleFROM Triangle
WITH cteAS (SELECT id, num, LEAD(num) OVER (ORDER BY id)AS next, LAG(num) OVER (ORDER BY id)AS prevFROM Logs)SELECT DISTINCT(num)AS ConsecutiveNumsFROM cteWHERE num= nextAND num= prev
1164. Product Price at a Given Date
SELECT product_id, new_priceAS priceFROM productsWHERE (product_id, change_date)IN(SELECT product_id,MAX(change_date)FROM productsWHERE change_date<='2019-08-16'GROUP BY product_id)UNIONSELECT product_id,10AS priceFROM productsWHEN product_id NOTIN(SELECT product_idFROM productsWHERE change_date<='2019-08-16')
1978. Employees Whose Manager Left the Company
SELECT employee_idFROM EmployeesWHERE manager_id NOTIN (SELECT employee_idFROM Employees)AND salary<30000ORDER BY employee_id
185. Department Top Three Salaries
WITH RankedSalariesAS (SELECTe.IdAS employee_id,e.nameAS employee,e.salary,e.departmentId, DENSE_RANK() OVER (PARTITION BYe.departmentIdORDER BYe.salaryDESC)AS salary_rankFROM Employee e)SELECTd.nameAS Department,r.employee,r.salaryFROM Department dJOIN RankedSalaries rONr.departmentId=d.idWHEREr.salary_rank<=3;
SELECT user_id, CONCAT(UPPER(LEFT(name,1)),LOWER(RIGHT(name, LENGTH(name)-1)))AS nameFROM UsersORDER BY user_id
1527. Patients With a Condition
SELECT patient_id, patient_name, conditionsFROM patientsWHERE conditionsLIKE'% DIAB1%'OR conditionsLIKE'DIAB1%'
DELETE pFROM Person p, Person qWHEREp.id>q.idANDq.Email=p.Email
SELECT(SELECT DISTINCT SalaryFROM EmployeeORDER BY SalaryDESCLIMIT1 OFFSET1)AS SecondHighestSalary-- HINT: subquery is used to return null if there is no SecondHighestSalary
1517. Find Users With Valid E-Mails
SELECT*FROM UsersWHERE mail REGEXP'^[A-Za-z][A-Za-z0-9_\.\-]*@leetcode\\.com$'
1204. Last Person to Fit in the Bus
-- 1000 kg limit-- name of last personWITH CTEAS (SELECT person_name, weight, turn,SUM(weight) OVER(ORDER BY turn)AS total_weightFROM Queue)SELECT person_nameFROM cteWHERE total_weight<=1000ORDER BY total_weightDESCLIMIT1;
SELECT'Low Salary'AS category,SUM(IF(income<20000,1,0))AS accounts_countFROM AccountsUNIONSELECT'Average Salary'AS category,SUM(IF(income>=20000AND income<=50000,1,0))AS accounts_countFROM AccountsUNIONSELECT'High Salary'AS category,SUM(IF(income>50000,1,0))AS accounts_countFROM Accounts
-- id, student-- swap every two consecutives-- num(students): odd? no swap for last oneSELECT id, CASE WHEN MOD(id,2)=0 THEN (LAG(student) OVER (ORDER BY id))ELSE (LEAD(student,1, student) OVER (ORDER BY id))ENDAS'Student'FROM Seat
1327. List the Products Ordered in a Period
-- name, amt-- >= 100 units, feb 2020SELECTp.product_name,SUM(o.unit)AS unitFROM Products pLEFT JOIN Orders oONp.product_id=o.product_idWHERE DATE_FORMAT(order_date,'%Y-%m')='2020-02'GROUP BYp.product_nameHAVINGSUM(o.unit)>=100
1484. Group Sold Products By The Date
SELECT sell_date,COUNT(DISTINCT product)AS num_sold,GROUP_CONCAT(DISTINCT product)AS'products'FROM ActivitiesGROUP BY sell_dateORDER BY sell_date
(SELECT nameAS resultsFROM Users uLEFT JOIN MovieRating mrONu.user_id=mr.user_idGROUP BY nameORDER BYCOUNT(rating)DESC, nameASCLIMIT1)UNION ALL(SELECT titleFROM Movies mLEFT JOIN MovieRating mrONm.movie_id=mr.movie_idWHERE DATE_FORMAT(created_at,'%Y-%m')='2020-02'GROUP BY titleORDER BYAVG(rating)DESC, titleASCLIMIT1 )
-- pay: last 7 days (today inclusive) - avg.amt (round, 2)SELECT visited_on, amount, ROUND(amount/7,2)AS average_amountFROM (SELECT DISTINCT visited_on,SUM(amount) OVER(ORDER BY visited_on RANGE BETWEEN INTERVAL6 DAY PRECEDINGAND CURRENT ROW)AS amount,MIN(visited_on) OVER() day_1FROM Customer) tWHERE visited_on>= day_1+6;
602. Friend Requests II: Who Has the Most Friends
-- `union` selects only unique vals, so we use `union all` hereWITH CTEAS (SELECT requester_idAS idFROM RequestAcceptedUNION ALLSELECT accepter_idAS idFROM RequestAccepted)SELECT id,COUNT(id)AS numFROM CTEGROUP BY idORDER BY numDESCLIMIT1
SELECT ROUND(SUM(tiv_2016),2)AS tiv_2016FROM insuranceWHERE tiv_2015IN (SELECT tiv_2015FROM insuranceGROUP BY tiv_2015HAVINGCOUNT(*)>1)AND (lat,lon)IN (SELECT lat,lonFROM insuranceGROUP BY lat,lonHAVINGCOUNT(*)=1)
About
Solutions for SQL 50 Study Plan on LeetCode
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.