Phân trang

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

Michel Semaan

Data Scientist

Phân trang là gì?

  • Phân trang: Chia dữ liệu thành các phần (xấp xỉ) bằng nhau
  • Ứng dụng
    • Nhiều API trả dữ liệu theo "trang" để giảm lượng truyền
    • Chia dữ liệu thành tứ phân vị hoặc ba phần (trên, giữa 33%, và dưới) để đánh giá hiệu suất

Đến với NTILE

  • NTILE(n) chia dữ liệu thành n trang xấp xỉ bằng nhau
Thống kê tóm tắt và Window Functions trong PostgreSQL

Phân trang - Bảng nguồn

Truy vấn

SELECT
  DISTINCT Discipline
FROM Summer_Medals;
  • Chia dữ liệu thành 15 trang xấp xỉ bằng nhau
  • $67 / 15 \simeq 4$, nên mỗi trang có bốn hoặc năm hàng

Kết quả

| Discipline          |
|---------------------|
| Wrestling Freestyle |
| Archery             |
| Baseball            |
| Lacrosse            |
| Judo                |
| Athletics           |
| ...                 |

(67 hàng)
Thống kê tóm tắt và Window Functions trong PostgreSQL

Phân trang

Truy vấn

WITH Disciplines AS (
  SELECT
    DISTINCT Discipline
  FROM Summer_Medals)

SELECT
  Discipline, NTILE(15) OVER () AS Page
From Disciplines
ORDER BY Page ASC;

Kết quả

| Discipline          | Page |
|---------------------|------|
| Wrestling Freestyle | 1    |
| Archery             | 1    |
| Baseball            | 1    |
| Lacrosse            | 1    |
| Judo                | 1    |
| Athletics           | 2    |
| ...                 | ...  |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Ba phần: trên, giữa, dưới

Truy vấn

WITH Country_Medals AS (
  SELECT
    Country, COUNT(*) AS Medals
  FROM Summer_Medals
  GROUP BY Country),

SELECT
  Country, Medals,
  NTILE(3) OVER (ORDER BY Medals DESC) AS Third
FROM Country_Medals;

Kết quả

| Country | Medals | Third |
|---------|--------|-------|
| USA     | 4585   | 1     |
| URS     | 2049   | 1     |
| GBR     | 1720   | 1     |
| ...     | ...    | ...   |
| CZE     | 56     | 2     |
| LTU     | 55     | 2     |
| ...     | ...    | ...   |
| DOM     | 6      | 3     |
| BWI     | 5      | 3     |
| ...     | ...    | ...   |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Trung bình theo ba phần

Truy vấn

WITH Country_Medals AS (...),

  Thirds AS (
  SELECT
    Country, Medals,
    NTILE(3) OVER (ORDER BY Medals DESC) AS Third
  FROM Country_Medals)

SELECT
  Third,
  ROUND(AVG(Medals), 2) AS Avg_Medals
FROM Thirds
GROUP BY Third
ORDER BY Third ASC;

Kết quả

| Third | Avg_Medals |
|-------|------------|
| 1     | 598.74     |
| 2     | 22.98      |
| 3     | 2.08       |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Luyện tập nào!

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

Preparing Video For Download...