Секции окна

Манипуляции с данными в SQL

Mona Khalil

Data Scientist, Greenhouse Software

OVER и PARTITION BY

  • Вычислять отдельные значения для разных категорий
  • Выполнять разные вычисления в одном столбце
AVG(home_goal) OVER(PARTITION BY season)
Манипуляции с данными в SQL

Разбивка данных на секции

  • Сколько голов забито в каждом матче и как это соотносится с общим средним?
SELECT
    date,
    (home_goal + away_goal) AS goals,
    AVG(home_goal + away_goal) OVER() AS overall_avg
FROM match;
| date       | goals | overall_avg |
|------------|-------|-------------|
| 2011-12-17 | 3     | 2.73210     |
| 2012-05-01 | 2     | 2.73210     |
| 2012-11-27 | 4     | 2.73210     |
| 2013-04-20 | 1     | 2.73210     |
| 2013-11-09 | 5     | 2.73210     |
Манипуляции с данными в SQL

Разбивка данных на секции

  • Сколько голов забито в каждом матче и как это соотносится со средним по сезону?
SELECT
    date,
    (home_goal + away_goal) AS goals,
    AVG(home_goal + away_goal) OVER(PARTITION BY season) AS season_avg
FROM match;
| date       | goals | season_avg  |
|------------|-------|-------------|
| 2011-12-17 | 3     | 2.71646     |
| 2012-05-01 | 2     | 2.71646     |
| 2012-11-27 | 4     | 2.77270     |
| 2013-04-20 | 1     | 2.77270     |
| 2013-11-09 | 5     | 2.76682     |
Манипуляции с данными в SQL

PARTITION BY по нескольким столбцам

SELECT 
  c.name,
  m.season,
  (home_goal + away_goal) AS goals,
  AVG(home_goal + away_goal) 
      OVER(PARTITION BY m.season, c.name) AS season_ctry_avg
FROM country AS c
LEFT JOIN match AS m 
ON c.id = m.country_id
| name        | season    | goals     | season_ctry_avg |
|-------------|-----------|-----------|-----------------|
| Belgium     | 2011/2012 | 1         | 2.88            |
| Netherlands | 2014/2015 | 1         | 3.08            |
| Belgium     | 2011/2012 | 1         | 2.88            |
| Spain       | 2014/2015 | 2         | 2.66            |
Манипуляции с данными в SQL

Особенности PARTITION BY

  • Можно разбивать данные по одному или нескольким столбцам
  • Можно применять к агрегатным вычислениям, рангам и т. д.
Манипуляции с данными в SQL

Давайте потренируемся!

Манипуляции с данными в SQL

Preparing Video For Download...