New game
Download
Get Academic Plan
Share game
Fill in the Blanks
Fill in the Blanks

Mastering SQL Window Functions

Integrate it into your platform

You can integrate the game into an LMS compatible with LTI 1.1 or LTI 1.3 such as Canvas, Moodle, or Blackboard. This way, the scores will be automatically saved into the platform’s gradebook.
Download
You have exceeded the maximum number of games you can integrate into Google Classroom with your current Plan.

To integrate as many games as you want in Google Classroom, you need an Academic Plan or a Commercial Plan.

You have exceeded the maximum number of games you can integrate into Microsoft Teams with your current Plan.

To integrate as many games as you want in Microsoft Teams, you need an Academic Plan or a Commercial Plan.

Downloading games is an exclusive feature for users with an Academic Plan or a Commercial Plan.

Get your Academic Plan or your Commercial Plan now and start integrating your games into your LMS, website or blog.

If you wish, you can download a demo game here and test its integration:

Mastering SQL Window Functions

Fill in the Blanks

Played 0

About this activity

Drills to master window functions in SQL

Created by

United States

Download the paper version to play

Make your own free game from our game creator
Compete against your friends to see who gets the best score in this game

Top Games

%
Anonymous
Anonymous
%
%
%
You have exceeded the maximum number of games you can print with your current Plan.

To print as many games as you want, you need an Academic Plan or a Commercial Plan.

Print your game
Mastering SQL Window Functions
 

Fill in the Blanks

Mastering SQL Window FunctionsOnline version

Drills to master window functions in SQL

by Good Sam
1

sale_date sale_date running_total ORDER sales amount amount FROM SUM OVER BY SELECT AS

Problem 1 : Calculate Running Total
Question : You have a table sales ( sale_date DATE , amount DECIMAL ) . Write a SQL query to calculate a running total of amount , ordered by sale_date .

Solution :

, ,
( ) ( )
;

2

BY BETWEEN AND running_total AVG ORDER SELECT as ROW sales current_avg sales sale_date ROW sale_date sale_date BY sale_date UNBOUNDED ROWS AND FROM FROM sale_date 3 BETWEEN CURRENT amount sales BETWEEN amount BETWEEN sale_date 3 AND BY OVER amount amount as BY sales moving_avg BY amount ORDER amount OVER amount FOLLOWING sale_date SELECT as amount FOLLOWING OVER AND PRECEDING 6 OVER ROW as CURRENT ROW FROM ROWS CURRENT UNBOUNDED sum_to_end sales SELECT ORDER ROWS BETWEEN as ROW ORDER PRECEDING SELECT FROM AND CURRENT OVER SUM sale_date ROWS ROWS CURRENT amount SUM FROM AVG AVG sale_date PRECEDING ORDER moving_avg

Problem 2 : Calculate Moving Average
Question : Calculate a 7 - day moving average of sales from the sales table .

Solution :

, ,
( ) ( )
;

Example 2 : Fixed Range with Both PRECEDING and FOLLOWING

, ,
( ) ( )
;

This calculates the average amount using a window that includes three rows before , the current row , and three rows after the current row .

Example 3 : From Start of Data to Current Row
, ,
( ) ( )
;

This query computes a running total starting from the first row in the partition or result set up to the current row .

Example 4 : Current Row to End of Data
SELECT sale_date , amount ,
( ) ( )
;

This sums the amount from the current row to the last row of the partition or result set .

Example 5 : Current Row Only
, ,
( ) ( )
;

This calculates the average of just the current row's amount , which effectively returns the amount itself .

3

total_purchases name BY ORDER RANK FROM customers SELECT total_purchases OVER rank AS id DESC

Problem 3 : Rank Customers by Sales

Question : From a table customers ( id INT , name VARCHAR , total_purchases DECIMAL ) , rank customers based on their total_purchases in descending order .

Solution :

, , ,
( ) ( )
;
Explanation : RANK ( ) assigns a unique rank to each row , with gaps in the ranking for ties , based on the total_purchases in descending order .

4

sale_date BY AS ORDER ROW_NUMBER() OVER SELECT amount row_num sale_date FROM sales

Problem 4 : Row Numbering

Question : Assign a unique row number to each sale in the sales table ordered by sale_date .

Solution :

, ,
( )
;

Explanation : ROW_NUMBER ( ) generates a unique number for each row , starting at 1 , based on the ordering of sale_date .

5

BY customer_id AS purchase_date first_purchase customer_id PARTITION FROM purchases OVER MIN SELECT

Problem 5 : Find the First Purchase Date for Each Customer
Question : Given a table purchases ( customer_id INT , purchase_date DATE ) , write a SQL query to find the first purchase date for each customer .

Solution :

, ( ) ( )
;

Explanation : MIN ( ) window function is used here , partitioned by customer_id so that the minimum purchase date is calculated for each customer separately .

6

ORDER LAG sales_data LAG amount FROM sale_date previous_day_amount amount amount BY SELECT amount AS OVER 1 OVER sale_date AS 1 ORDER BY change_in_amount sale_date

The LAG function is very useful in scenarios where you need to compare successive entries or calculate differences between them . For example , calculating day - over - day sales changes :


SELECT sale_date ,
amount ,
LAG ( amount , 1 ) OVER ( ORDER BY sale_date ) AS previous_day_amount ,
amount - LAG ( amount , 1 ) OVER ( ORDER BY sale_date ) AS change_in_amount
FROM sales_data ;



,
,
( , ) ( ) ,
- ( , ) ( )
;

In this query , the change_in_amount field computes the difference in sales between consecutive days . If the LAG function references a row that doesn't exist ( e . g . , the first row in the dataset ) , it will return NULL unless a default value is specified .


The LAG window function in SQL is used to access data from a previous row in the same result set without the need for a self - join . It's a part of the SQL window functions that provide the ability to perform calculations across rows that are related to the current row . LAG is particularly useful for comparisons between records in ordered data .

How LAG Works :
LAG takes up to three arguments :

Expression : The column or expression you want to retrieve from a preceding row .
Offset : An optional integer specifying how many rows back from the current row the function should look . If not specified , the default is 1 , meaning the immediate previous row .
Default : An optional argument that provides a default value to return if the LAG function attempts to go beyond the first row of the dataset .
Syntax :
LAG ( expression , offset , default ) OVER ( [ PARTITION BY partition_expression ] ORDER BY sort_expression )


Are you sure you want to leave the page?

If you leave the page, you will lose your game progress.