Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a window function in Snowflake?
A window function performs a calculation across a set of table rows related to the current row, without collapsing the rows into a single output row.
Click to reveal answer
beginner
What does the OVER() clause do in a Snowflake window function?
The OVER() clause defines the window or set of rows the function operates on, including partitioning and ordering rules.
Click to reveal answer
intermediate
How does PARTITION BY affect a window function in Snowflake?
PARTITION BY divides the data into groups (partitions) so the window function runs separately within each group.
Click to reveal answer
advanced
What is the difference between ROWS and RANGE in window framing?
ROWS counts physical rows relative to the current row; RANGE considers logical values in the order column, including ties.
Click to reveal answer
beginner
Give an example of a common window function in Snowflake and its use.
ROW_NUMBER() assigns a unique number to each row within a partition, useful for ranking or deduplication.
Click to reveal answer
Which clause is mandatory for a window function in Snowflake?
AOVER()
BWHERE
CGROUP BY
DHAVING
✗ Incorrect
The OVER() clause is required to define the window for the function.
What does PARTITION BY do in a window function?
AFilters rows before calculation
BGroups rows for separate calculations
CSorts rows globally
DLimits output rows
✗ Incorrect
PARTITION BY groups rows so the function runs separately on each group.
Which window function assigns a unique rank to each row?
ASUM()
BAVG()
CROW_NUMBER()
DCOUNT()
✗ Incorrect
ROW_NUMBER() gives a unique number to each row within its partition.
What is the default frame for window functions if not specified?
AROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
BROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
CRANGE BETWEEN CURRENT ROW AND CURRENT ROW
DRANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
✗ Incorrect
The default frame is RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
Which keyword defines the order of rows in a window function?
AORDER BY
BPARTITION BY
CGROUP BY
DFILTER BY
✗ Incorrect
ORDER BY inside OVER() sets the order of rows for the window function.
Explain how window functions differ from aggregate functions in Snowflake.
Think about whether the number of rows changes after applying the function.
You got /4 concepts.
Describe how to use PARTITION BY and ORDER BY together in a window function and why.
Consider how you would rank students by class and score.
You got /4 concepts.
Practice
(1/5)
1. What does a window function in Snowflake do?
easy
A. Calculates values across rows related to the current row without grouping them into fewer rows
B. Groups rows and reduces the number of rows returned
C. Deletes duplicate rows from the result set
D. Creates a new table from existing data
Solution
Step 1: Understand window function purpose
Window functions perform calculations across a set of rows related to the current row but do not reduce the number of rows returned.
Step 2: Compare with grouping
Unlike GROUP BY, window functions keep all rows visible while calculating values like running totals or ranks.
Final Answer:
Calculates values across rows related to the current row without grouping them into fewer rows -> Option A
Quick Check:
Window functions analyze rows without grouping = A [OK]
Hint: Window functions keep all rows, unlike GROUP BY [OK]
Common Mistakes:
Confusing window functions with GROUP BY aggregation
Thinking window functions reduce row count
Assuming window functions delete duplicates
2. Which of the following is the correct syntax to calculate a running total of sales using a window function in Snowflake?
easy
A. SELECT SUM(sales) GROUP BY region ORDER BY date FROM sales_data;
B. SELECT sales + PREVIOUS(sales) FROM sales_data;
C. SELECT RUNNING_TOTAL(sales) FROM sales_data;
D. SELECT SUM(sales) OVER (PARTITION BY region ORDER BY date) FROM sales_data;
Solution
Step 1: Identify correct window function syntax
SUM(sales) OVER (PARTITION BY region ORDER BY date) correctly calculates a running total partitioned by region and ordered by date.
Step 2: Eliminate incorrect options
SELECT SUM(sales) GROUP BY region ORDER BY date FROM sales_data; uses GROUP BY which reduces rows, not a window function. Options C and D use invalid functions or syntax.
Final Answer:
SELECT SUM(sales) OVER (PARTITION BY region ORDER BY date) FROM sales_data; -> Option D
Quick Check:
SUM() OVER with PARTITION BY and ORDER BY = B [OK]
Hint: Look for SUM() OVER with PARTITION BY and ORDER BY [OK]
Common Mistakes:
Using GROUP BY instead of OVER clause
Using non-existent functions like RUNNING_TOTAL
Omitting ORDER BY in window function
3. Given the table sales with columns region, date, and amount, what is the output of this query?
SELECT region, date, amount, RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS rank FROM sales;
medium
A. Ranks sales amounts within each region from highest to lowest
B. Ranks sales amounts across all regions ignoring region groups
C. Calculates cumulative sum of amounts per region
D. Returns the total number of sales per region
Solution
Step 1: Understand RANK() with PARTITION BY and ORDER BY
RANK() assigns ranks starting at 1 within each partition (region), ordering by amount descending.
Step 2: Interpret the query output
The query shows each sale with its rank in its region based on amount, highest amount ranked 1.
Final Answer:
Ranks sales amounts within each region from highest to lowest -> Option A
Quick Check:
RANK() OVER PARTITION BY region ORDER BY amount DESC = A [OK]
Hint: RANK() with PARTITION BY ranks within groups [OK]
Common Mistakes:
Thinking RANK() ignores PARTITION BY
Confusing RANK() with cumulative sum
Assuming ranks are across all rows without grouping
4. Identify the error in this Snowflake query:
SELECT employee_id, salary, ROW_NUMBER() OVER (ORDER BY salary) PARTITION BY department FROM employees;
medium
A. ORDER BY cannot be used in window functions
B. ROW_NUMBER() cannot be used with ORDER BY
C. PARTITION BY must come before ORDER BY inside OVER()
D. Missing GROUP BY clause for department
Solution
Step 1: Check window function clause order
In Snowflake, PARTITION BY must appear before ORDER BY inside the OVER() clause.
Step 2: Identify syntax error
The query places PARTITION BY after ORDER BY, which is invalid syntax.
Final Answer:
PARTITION BY must come before ORDER BY inside OVER() -> Option C
Quick Check:
PARTITION BY before ORDER BY in OVER() = D [OK]
Hint: PARTITION BY always before ORDER BY in OVER() [OK]
Common Mistakes:
Placing PARTITION BY after ORDER BY
Thinking ROW_NUMBER() disallows ORDER BY
Adding unnecessary GROUP BY for window functions
5. You want to calculate the average sales per region and also show each sale's rank by amount within its region. Which query correctly combines these using window functions?
hard
A. SELECT region, amount, AVG(amount) PARTITION BY region, RANK() ORDER BY amount DESC FROM sales;
B. SELECT region, amount, AVG(amount) OVER (PARTITION BY region) AS avg_region, RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS rank FROM sales;
C. SELECT region, amount, AVG(amount), RANK() FROM sales GROUP BY region ORDER BY amount DESC;
D. SELECT region, amount, AVG(amount) OVER (), RANK() OVER (ORDER BY amount) FROM sales;
Solution
Step 1: Use AVG() as window function partitioned by region
AVG(amount) OVER (PARTITION BY region) calculates average sales per region without grouping rows.
Step 2: Use RANK() partitioned by region ordered by amount descending
RANK() OVER (PARTITION BY region ORDER BY amount DESC) ranks sales within each region.
Step 3: Verify query correctness
SELECT region, amount, AVG(amount) OVER (PARTITION BY region) AS avg_region, RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS rank FROM sales; correctly uses window functions with proper syntax and clauses.
Final Answer:
SELECT region, amount, AVG(amount) OVER (PARTITION BY region) AS avg_region, RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS rank FROM sales; -> Option B
Quick Check:
AVG() and RANK() with PARTITION BY region = C [OK]
Hint: Use OVER(PARTITION BY region) for both AVG and RANK [OK]