Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 2.5 KB

File metadata and controls

91 lines (66 loc) · 2.5 KB

Window Functions: Using ROWNUMBER, RANK, and NTILE

Introduction

Window functions are powerful tools in SQL that allow you to perform calculations across a set of table rows related to the current row. This section covers how to use window functions such as ROWNUMBER, RANK, and NTILE to perform various analytical tasks.

ROWNUMBER Function

ROWNUMBER is a window function that assigns a unique sequential integer to each row within a partition of a result set.

ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2)
  • PARTITION BY: Optional clause that divides the result set into partitions. The ROWNUMBER is reset for each partition.
  • ORDER BY: Defines the order of rows within each partition.

Example

Calculate the row number for each product category ordered by total sales:

SELECT
    productid,
    productcategory,
    totalsales,
    ROW_NUMBER() OVER (PARTITION BY productcategory ORDER BY totalsales DESC) AS row_num
FROM
    sales;

RANK Function

RANK is a window function that assigns a rank to each row within a partition of a result set, with gaps in rank numbers if there are ties.

RANK() OVER (PARTITION BY column1 ORDER BY column2)
  • PARTITION BY: Optional clause that divides the result set into partitions. The ranking is reset for each partition.
  • ORDER BY: Defines the order of rows within each partition.

Example

Rank products by total sales within each product category:

SELECT
    productid,
    productcategory,
    totalsales,
    RANK() OVER (PARTITION BY productcategory ORDER BY totalsales DESC) AS sales_rank
FROM
    sales;

NTILE Function

NTILE is a window function that divides the result set into a specified number of groups, assigning each row to a bucket or group.

NTILE(num_buckets) OVER (ORDER BY column)
  • num_buckets: Specifies the number of groups or buckets to divide the result set into.
  • ORDER BY: Defines the order of rows for partitioning into groups.

Example

Divide customers into quartiles based on their order amounts:

SELECT
    customerid,
    orderamount,
    NTILE(4) OVER (ORDER BY orderamount) AS quartile
FROM
    orders;

Practice Exercises

  • Find any customer that has more then one order, using row_number().
  • find the rank all products sold.

Previous: Locking and Concurrency | End - Congratulations 🥳: