Trung bình trượt và tổng trượt

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

Michel Semaan

Moving averages

Tổng quan

  • Trung bình trượt (MA): Trung bình của n kỳ gần nhất
    • Ví dụ: MA 10 ngày của số đơn vị bán là trung bình số đơn vị đã bán trong 10 ngày gần nhất
    • Dùng để chỉ động lượng/xu hướng
    • Cũng hữu ích để loại bỏ tính thời vụ
  • Tổng trượt: Tổng của n kỳ gần nhất
    • Ví dụ: Tổng huy chương của 3 kỳ Thế vận hội gần nhất
    • Dùng để đánh giá hiệu suất; nếu tổng giảm, hiệu suất chung giảm
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 = 'USA'
  AND Medal = 'Gold'
  AND Year >= 1980
GROUP BY Year
ORDER BY Year ASC;

Kết quả

| Year | Medals |
|------|--------|
| 1984 | 168    |
| 1988 | 77     |
| 1992 | 89     |
| 1996 | 160    |
| 2000 | 130    |
| 2004 | 116    |
| 2008 | 125    |
| 2012 | 147    |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Trung bình trượt

Truy vấn

WITH US_Medals AS (...)

SELECT
  Year, Medals,
  AVG(Medals) OVER
    (ORDER BY Year ASC
     ROWS BETWEEN
     2 PRECEDING AND CURRENT ROW) AS Medals_MA
FROM US_Medals
ORDER BY Year ASC;

Kết quả

| Year | Medals | Medals_MA |
|------|--------|-----------|
| 1984 | 168    | 168.00    |
| 1988 | 77     | 122.50    |
| 1992 | 89     | 111.33    |
| 1996 | 160    | 108.67    |
| 2000 | 130    | 126.33    |
| 2004 | 116    | 135.33    |
| 2008 | 125    | 123.67    |
| 2012 | 147    | 129.33    |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Tổng trượt

Truy vấn

WITH US_Medals AS (...)

SELECT
  Year, Medals,
  SUM(Medals) OVER
    (ORDER BY Year ASC
     ROWS BETWEEN
     2 PRECEDING AND CURRENT ROW) AS Medals_MT
FROM US_Medals
ORDER BY Year ASC;

Kết quả

| Year | Medals | Medals_MT |
|------|--------|-----------|
| 1984 | 168    | 168       |
| 1988 | 77     | 245       |
| 1992 | 89     | 334       |
| 1996 | 160    | 326       |
| 2000 | 130    | 379       |
| 2004 | 116    | 406       |
| 2008 | 125    | 371       |
| 2012 | 147    | 388       |
Thống kê tóm tắt và Window Functions trong PostgreSQL

ROWS vs RANGE

  • RANGE BETWEEN [START] AND [FINISH]
    • Hoạt động gần như ROWS BETWEEN
    • RANGE coi các giá trị trùng trong ORDER BY của OVER là một thực thể

Bảng

| Year | Medals | Rows_RT | Range_RT |
|------|--------|---------|----------|
| 1992 | 10     | 10      | 10       |
| 1996 | 50     | 60      | 110      |
| 2000 | 50     | 110     | 110      |
| 2004 | 60     | 170     | 230      |
| 2008 | 60     | 230     | 230      |
| 2012 | 70     | 300     | 300      |
  • Thường ưu tiên ROWS BETWEEN hơn RANGE BETWEEN
Thống kê tóm tắt và Window Functions trong PostgreSQL

Ayo berlatih!

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

Preparing Video For Download...