Використання агрегатних функцій над вікнами

Аналіз часових рядів у SQL Server

Maham Faisal Khan

Senior Data Science Content Developer

Функції ранжування

ROW_NUMBER()

Унікальне зростаюче ціле значення, починається з 1.

RANK()

Зростаюче ціле значення, починається з 1. Можливі однакові значення. Може пропускати числа.

DENSE_RANK()

Зростаюче ціле значення, починається з 1. Можливі однакові значення. Не пропускає числа.

RunsScored
8
7
7
6
6
3
Аналіз часових рядів у SQL Server

Обчислення номерів рядків

SELECT
    s.RunsScored,
    ROW_NUMBER() OVER (
      ORDER BY s.RunsScored DESC
    ) AS rn
FROM dbo.Scores s
ORDER BY
    s.RunsScored DESC;
RunsScored rn
8 1
7 2
7 3
6 4
6 5
3 6
Аналіз часових рядів у SQL Server

Обчислення рангів і щільних рангів

SELECT
    s.RunsScored,
    RANK() OVER (
      ORDER BY s.RunsScored DESC
    ) AS rk,
    DENSE_RANK() OVER (
      ORDER BY s.RunsScored DESC
    ) AS dr
FROM dbo.Scores s
ORDER BY
    s.RunsScored DESC;
RunsScored rk dr
8 1 1
7 2 2
7 2 2
6 4 3
6 4 3
3 6 4
Аналіз часових рядів у SQL Server

Розбиття на секції

SELECT
    s.Team,
    s.RunsScored,
    ROW_NUMBER() OVER (
      PARTITION BY s.Team
      ORDER BY s.RunsScored DESC
    ) AS rn
FROM dbo.Scores s
ORDER BY
    s.RunsScored DESC;
Team RunsScored rn
AZ 8 1
AZ 6 2
AZ 3 3
FLA 7 1
FLA 7 2
FLA 6 3
Аналіз часових рядів у SQL Server

Агрегатні функції

SELECT
    s.Team,
    s.RunsScored,
    MAX(s.RunsScored) OVER (
      PARTITION BY s.Team
    ) AS MaxRuns
FROM dbo.Scores s
ORDER BY
    s.RunsScored DESC;
Team RunsScored MaxRuns
AZ 8 8
AZ 6 8
AZ 3 8
FLA 7 7
FLA 7 7
FLA 6 7

Аналіз часових рядів у SQL Server

Агрегування з порожніми вікнами

SELECT
    s.Team,
    s.RunsScored,
    MAX(s.RunsScored) OVER() AS MaxRuns
FROM dbo.Scores s
ORDER BY
    s.RunsScored DESC;
Team RunsScored MaxRuns
AZ 8 8
AZ 6 8
AZ 3 8
FLA 7 8
FLA 7 8
FLA 6 8

Аналіз часових рядів у SQL Server

Давайте потренуємось!

Аналіз часових рядів у SQL Server

Preparing Video For Download...