SQL
SQL Analytics Master Sheet
SQL interview and analytics practice grouped by aggregation, joins, windows, cohorts, funnels, and NULL traps.
Aggregation, Grouping & HAVING
39 problems#0027
Categories Over Revenue Thresholdsqlgroup-byhaving
Easy10 XP#0029Find Duplicate Emailssqlduplicatesgroup-by
Easy10 XP#0061Second Highest Salarysqlrankingdistinct
Medium15 XP#0084Monthly Revenue With CTEsqlcteaggregation
Medium15 XP#0102Average Ignoring NULL Scoressqlnullsaggregation
Easy10 XP#0122Signup to Purchase Funnelsqlfunnelaggregation
Medium20 XP#0141Seven Day Active Userssqldatesdistinct
Medium20 XP#0159Monthly Active Userssqldatesaggregation
Medium20 XP#0173Customers Above Average Spendsqlcteaggregation
Medium20 XP#0189First Purchase Date per Usersqlaggregation
Easy10 XP#0190Users With Repeat Purchasessqlhaving
Medium20 XP#0205Average Order Value by Usersqlgroup byaggregation
Easy10 XP#0313Distinct Active Userssqldistinct
Easy10 XP#0314Count Orders Per Statussqlgroup-byaggregation
Easy10 XP#0315Total Revenue Per Customersqlgroup-bysum
Easy10 XP#0316Customers With More Than Two Orderssqlgroup-byhaving
Easy10 XP#0318Customer Order Counts Including Zerosqlleft-joinaggregation
Medium20 XP#0324Conditional Counts by Statussqlcaseaggregation
Medium20 XP#0325Distinct Products Per Usersqlcount-distinctaggregation
Easy10 XP#0326Departments With High Average Salarysqlhavingavg
Easy10 XP#0336Monthly Signupssqldatesaggregation
Easy10 XP#0337Days Between First and Last Eventsqldatesaggregation
Medium20 XP#0340Funnel Step Countssqlfunnelaggregation
Medium20 XP#0341Users Completing Full Funnelsqlfunnelhaving
Medium20 XP#0350CTE User Revenue Filtersqlcteaggregation
Medium20 XP#0355WHERE Before GROUP BYsqlwheregroup-by
Easy10 XP#0365Most Common Countrysqlgroup-byranking
Medium20 XP#0368Daily New Users by First Eventsqlctedatesaggregation
Medium20 XP#0370Churned Users With No Recent Eventsqldatesaggregation
Medium20 XP#0371Users With Multiple Event Typessqlgroup-bycount-distinct
Easy10 XP#0372Same Day Repeat Purchaserssqlgroup-byhaving
Medium20 XP#0374Retention Rate by Cohortsqlretentioncohortaggregation
Hard25 XP#0378Users With All Required Eventssqlrelational-divisionhaving
Medium20 XP#0382Latest Non-NULL Measurement Datesqlnullsaggregation
Medium20 XP#0383Customers With Exactly One Ordersqlgroup-byhaving
Easy10 XP#0385Cancellation Rate by Categorysqlcaseaggregationrate
Medium20 XP#0386Revenue Per Active Usersqlaggregationdistinctmetric
Medium20 XP#0389Simple Customer Lifetime Valuesqlaggregationmetric
Easy10 XP#0390Refund Adjusted Revenuesqljoinsaggregationmetric
Medium20 XPJoins, Anti-Joins & NULL Traps
24 problems#0025
Customers With No Orderssqlleft-joinanti-join
Easy10 XP#0030Day-One Retentionsqlretentionself-join
Medium15 XP#0083Customers With Recent Orderssqljoinsdate-filtering
Medium15 XP#0102Average Ignoring NULL Scoressqlnullsaggregation
Easy10 XP#0140Users With No Eventssqlleft-joinnulls
Easy10 XP#0174Find Rows Without Matches Using NOT EXISTSsqlnullsanti join
Medium20 XP#0317Join Orders to Customer Namessqljoinsinner-join
Easy10 XP#0318Customer Order Counts Including Zerosqlleft-joinaggregation
Medium20 XP#0319Products Never Soldsqlleft-joinanti-join
Easy10 XP#0320Orders Without Refundssqlnot-existsanti-join
Medium20 XP#0321Employee Manager Namessqlself-join
Medium20 XP#0322Revenue After Optional Discountssqlnullscoalesce
Easy10 XP#0338Seven Day Retentionsqlretentiondatesjoins
Medium20 XP#0342Cart Abandonerssqlfunnelanti-join
Medium20 XP#0354Avoid NOT IN With NULL Trapsqlnullsnot-exists
Medium20 XP#0356Prevent Join Duplicate Explosionsqljoinspre-aggregation
Medium20 XP#0359Users With Consecutive Login Dayssqlself-joindates
Medium20 XP#0373Find Missing Dates From Calendarsqlleft-joindates
Medium20 XP#0377Customers Bought A but Not Bsqlanti-joinexists
Medium20 XP#0380Preview Orphan Orderssqldata-qualityleft-join
Medium20 XP#0382Latest Non-NULL Measurement Datesqlnullsaggregation
Medium20 XP#0384Users With No Purchases After Signupsqlleft-joindatesanti-join
Medium20 XP#0390Refund Adjusted Revenuesqljoinsaggregationmetric
Medium20 XP#0393Pairs of Users in Same Countrysqlself-joinpairs
Medium20 XPWindow Functions, Ranking & CTEs
37 problems#0026
Top Product Per Categorysqlwindow-functionsranking
Medium15 XP#0028Running Revenue By Daysqlwindow-functionsrunning-total
Medium15 XP#0029Find Duplicate Emailssqlduplicatesgroup-by
Easy10 XP#0061Second Highest Salarysqlrankingdistinct
Medium15 XP#0084Monthly Revenue With CTEsqlcteaggregation
Medium15 XP#0085Rank Products by Revenuesqlwindow-functionsranking
Medium20 XP#0123Latest Row Per User With ROW_NUMBERsqlwindow-functionsdeduplication
Medium20 XP#0158Second Highest Salarysqlrankingwindow functions
Medium20 XP#0173Customers Above Average Spendsqlcteaggregation
Medium20 XP#0206Second Purchase Datesqlwindow functionsranking
Medium20 XP#0327Latest Login Per Usersqlwindow-functionsrow-number
Medium20 XP#0328Dense Rank Scoressqlwindow-functionsranking
Medium20 XP#0329Rank With Gapssqlwindow-functionsrank
Medium20 XP#0330Previous Order Amountsqlwindow-functionslag
Medium20 XP#0331Next Login Datesqlwindow-functionslead
Medium20 XP#0332Running Event Countsqlwindow-functionsrunning-total
Medium20 XP#0333Percent of Total Revenuesqlwindow-functionspercentage
Medium20 XP#0334Assign Revenue Quartilessqlwindow-functionsntile
Medium20 XP#0335Category Winner With FIRST_VALUEsqlwindow-functionsfirst-value
Medium20 XP#0350CTE User Revenue Filtersqlcteaggregation
Medium20 XP#0357Deduplicate Events Keep Firstsqlwindow-functionsdeduplication
Medium20 XP#0358Simple Sessionization by Gapsqlwindow-functionssessions
Hard25 XP#0360Top Two Products Per Categorysqlwindow-functionstop-n
Medium20 XP#0361Lowest Revenue Product Per Categorysqlwindow-functionsranking
Medium20 XP#0362Users Above Global Average Orderssqlctesubquery
Medium20 XP#0363First Date Cumulative Revenue Crosses Thresholdsqlwindow-functionsrunning-total
Hard25 XP#0364Rolling Three Day Revenuesqlwindow-functionsrolling-window
Hard25 XP#0365Most Common Countrysqlgroup-byranking
Medium20 XP#0366Median Value for Odd Row Countsqlwindow-functionsmedian
Hard25 XP#0368Daily New Users by First Eventsqlctedatesaggregation
Medium20 XP#0369Reactivated Users After Long Gapsqlwindow-functionsdatesretention
Hard25 XP#0376Product Share Within Categorysqlwindow-functionspercentage
Medium20 XP#0381Difference From Category Averagesqlwindow-functionsavg
Medium20 XP#0387Products With Price Increasesqlwindow-functionslag
Medium20 XP#0388First Order Amount Per Usersqlwindow-functionsfirst-event
Medium20 XP#0394Cumulative Users by Signup Daysqlwindow-functionsrunning-total
Medium20 XP#0395Latest Status Per Ordersqlwindow-functionsdeduplication
Medium20 XPDates, Cohorts, Retention & Funnels
22 problems#0030
Day-One Retentionsqlretentionself-join
Medium15 XP#0083Customers With Recent Orderssqljoinsdate-filtering
Medium15 XP#0103Cohort Month Zerosqlcohortdates
Medium20 XP#0122Signup to Purchase Funnelsqlfunnelaggregation
Medium20 XP#0141Seven Day Active Userssqldatesdistinct
Medium20 XP#0159Monthly Active Userssqldatesaggregation
Medium20 XP#0336Monthly Signupssqldatesaggregation
Easy10 XP#0337Days Between First and Last Eventsqldatesaggregation
Medium20 XP#0338Seven Day Retentionsqlretentiondatesjoins
Medium20 XP#0339Cohort Size by Signup Monthsqlcohortdates
Easy10 XP#0340Funnel Step Countssqlfunnelaggregation
Medium20 XP#0341Users Completing Full Funnelsqlfunnelhaving
Medium20 XP#0342Cart Abandonerssqlfunnelanti-join
Medium20 XP#0359Users With Consecutive Login Dayssqlself-joindates
Medium20 XP#0368Daily New Users by First Eventsqlctedatesaggregation
Medium20 XP#0369Reactivated Users After Long Gapsqlwindow-functionsdatesretention
Hard25 XP#0370Churned Users With No Recent Eventsqldatesaggregation
Medium20 XP#0373Find Missing Dates From Calendarsqlleft-joindates
Medium20 XP#0374Retention Rate by Cohortsqlretentioncohortaggregation
Hard25 XP#0375Visit to Purchase Conversion Ratesqlfunnelconversion-rate
Hard25 XP#0384Users With No Purchases After Signupsqlleft-joindatesanti-join
Medium20 XP#0392Retention Matrix Cellsqlcohortretentiondates
Hard25 XP