Khung

Thống kê tóm tắt và Window Functions trong PostgreSQL

Michel Semaan

Data Scientist

Động lực

LAST_VALUE

LAST_VALUE(City) OVER (
 ORDER BY Year ASC
 RANGE BETWEEN
   UNBOUNDED PRECEDING AND
   UNBOUNDED FOLLOWING
) AS Last_City
  • Khung: RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  • Nếu không có khung, LAST_VALUE trả về giá trị của hàng hiện tại trong cột City
  • Mặc định, khung bắt đầu từ đầu bảng hoặc phân vùng và kết thúc tại hàng hiện tại
Thống kê tóm tắt và Window Functions trong PostgreSQL

ROWS BETWEEN

  • ROWS BETWEEN [START] AND [FINISH]
    • n PRECEDING: n hàng trước hàng hiện tại
    • CURRENT ROW: hàng hiện tại
    • n FOLLOWING: n hàng sau hàng hiện tại

Ví dụ

  • ROWS BETWEEN 3 PRECEDING AND CURRENT ROW
  • ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
  • ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING
Thống kê tóm tắt và Window Functions trong PostgreSQL

Bảng nguồn

Truy vấn

SELECT
  Year, COUNT(*) AS Medals
FROM Summer_Medals
WHERE
  Country = 'RUS'
  AND Medal = 'Gold'
GROUP BY Year
ORDER BY Year ASC;

Kết quả

| Year | Medals |
|------|--------|
| 1996 | 36     |
| 2000 | 66     |
| 2004 | 47     |
| 2008 | 43     |
| 2012 | 47     |
Thống kê tóm tắt và Window Functions trong PostgreSQL

MAX không có khung

Truy vấn

WITH Russia_Medals AS (...)

SELECT
  Year, Medals,
  MAX(Medals)
    OVER (ORDER BY Year ASC) AS Max_Medals
FROM Russia_Medals
ORDER BY Year ASC;

Kết quả

| Year | Medals | Max_Medals |
|------|--------|------------|
| 1996 | 36     | 36         |
| 2000 | 66     | 66         |
| 2004 | 47     | 66         |
| 2008 | 43     | 66         |
| 2012 | 47     | 66         |
Thống kê tóm tắt và Window Functions trong PostgreSQL

MAX với khung

Truy vấn

WITH Russia_Medals AS (...)

SELECT
  Year, Medals,
  MAX(Medals)
    OVER (ORDER BY Year ASC) AS Max_Medals,
  MAX(Medals)
    OVER (ORDER BY Year ASC
          ROWS BETWEEN
          1 PRECEDING AND CURRENT ROW)
    AS Max_Medals_Last
FROM Russia_Medals
ORDER BY Year ASC;

Kết quả

| Year | Medals | Max_Medals | Max_Medals_Last |
|------|--------|------------|-----------------|
| 1996 | 36     | 36         | 36              |
| 2000 | 66     | 66         | 66              |
| 2004 | 47     | 66         | 66              |
| 2008 | 43     | 66         | 47              |
| 2012 | 47     | 66         | 47              |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Hàng hiện tại và kế tiếp

Truy vấn

WITH Russia_Medals AS (...)

SELECT
  Year, Medals,
  MAX(Medals)
    OVER (ORDER BY Year ASC
          ROWS BETWEEN
          CURRENT ROW AND 1 FOLLOWING)
    AS Max_Medals_Next
FROM Russia_Medals
ORDER BY Year ASC;

Kết quả

| Year | Medals | Max_Medals_Next |
|------|--------|-----------------|
| 1996 | 36     | 66              |
| 2000 | 66     | 66              |
| 2004 | 47     | 47              |
| 2008 | 43     | 47              |
| 2012 | 47     | 47              |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Hãy luyện tập!

Thống kê tóm tắt và Window Functions trong PostgreSQL

Preparing Video For Download...