Tổng quan các hàm hữu ích

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

Michel Semaan

Data Scientist

Nhiều null

Truy vấn

SELECT
  Country, Medal, COUNT(*) AS Awards
FROM summer_medals
WHERE
  Year = 2008 AND Country IN ('CHN', 'RUS')
GROUP BY ROLLUP(Country, Medal)
ORDER BY Country ASC, Medal ASC;
  • null biểu thị tổng theo nhóm

Kết quả

| Country | Medal  | Awards |
|---------|--------|--------|
| CHN     | Bronze | 57     |
| CHN     | Gold   | 74     |
| CHN     | Silver | 53     |
| CHN     | null   | 184    |
| RUS     | Bronze | 56     |
| RUS     | Gold   | 43     |
| RUS     | Silver | 44     |
| RUS     | null   | 143    |
| null    | null   | 327    |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Giới thiệu COALESCE

  • COALESCE() nhận một danh sách và trả về giá trị đầu tiên khác null, từ trái sang phải
  • COALESCE(null, null, 1, null, 2) → 1
  • Hữu ích khi dùng các phép SQL trả về null
    • ROLLUPCUBE
    • Xoay bảng (pivot)
    • LAGLEAD
Thống kê tóm tắt và Window Functions trong PostgreSQL

Loại bỏ null

Truy vấn

SELECT
  COALESCE(Country, 'Both countries') AS Country,
  COALESCE(Medal, 'All medals') AS Medal,
  COUNT(*) AS Awards
FROM summer_medals
WHERE
  Year = 2008 AND Country IN ('CHN', 'RUS')
GROUP BY ROLLUP(Country, Medal)
ORDER BY Country ASC, Medal ASC;

Kết quả

| Country        | Medal      | Awards |
|----------------|------------|--------|
| Both countries | All medals | 327    |
| CHN            | All medals | 184    |
| CHN            | Bronze     | 57     |
| CHN            | Gold       | 74     |
| CHN            | Silver     | 53     |
| RUS            | All medals | 143    |
| RUS            | Bronze     | 56     |
| RUS            | Gold       | 43     |
| RUS            | Silver     | 44     |
Thống kê tóm tắt và Window Functions trong PostgreSQL

Nén dữ liệu

Trước

| Country | Rank |
|---------|------|
| CHN     | 1    |
| RUS     | 2    |
| USA     | 3    |
  • Rank dư thừa vì thứ hạng đã hiển thị ngầm

Sau

CHN, RUS, USA
  • Ngắn gọn và đủ thông tin vì thứ hạng đã ngầm định
Thống kê tóm tắt và Window Functions trong PostgreSQL

Giới thiệu STRING_AGG

  • STRING_AGG(column, separator) lấy mọi giá trị trong một cột và nối lại, với separator giữa các giá trị

STRING_AGG(Letter, ', ') chuyển cái này...

| Letter |
|--------|
| A      |
| B      |
| C      |

...thành cái này

A, B, C
Thống kê tóm tắt và Window Functions trong PostgreSQL

Truy vấn và kết quả

Trước

WITH Country_Medals AS (
  SELECT
    Country, COUNT(*) AS Medals
  FROM Summer_Medals
  WHERE Year = 2012
    AND Country IN ('CHN', 'RUS', 'USA')
    AND Medal = 'Gold'
    AND Sport = 'Gymnastics'
  GROUP BY Country),

  SELECT
    Country,
    RANK() OVER (ORDER BY Medals DESC) AS Rank
  FROM Country_Medals
  ORDER BY Rank ASC;

Sau

WITH Country_Medals AS (...),

  Country_Ranks AS (...)

  SELECT STRING_AGG(Country, ', ')
  FROM Country_Medals;

Kết quả

CHN, RUS, USA
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...