×

Tính phân vị với hàm CUME_DIST() trong MySQL

Trong phân tích dữ liệu và thống kê, phân vị là một khái niệm quan trọng, giúp đánh giá vị trí của một giá trị trong một tập hợp dữ liệu. Trong MySQL, bạn có thể sử dụng hàm CUME_DIST() để tính phân vị cho các giá trị trong bảng dữ liệu của mình một cách dễ dàng và hiệu quả.

CUME_DIST() là một trong những hàm cửa sổ (window function) trong MySQL, giúp bạn tính toán tỉ lệ tích lũy của một giá trị cụ thể trong tập dữ liệu. Nói một cách đơn giản, nó cho phép bạn xác định phần trăm các giá trị có giá trị thấp hơn hoặc bằng giá trị đó trong một tập hợp dữ liệu.

Cú pháp của CUME_DIST()

Cú pháp của hàm CUME_DIST() trong MySQL như sau:

CUME_DIST() OVER (
    [PARTITION BY partition_definition]
    ORDER BY order_definition
)

Trong đó:

  • PARTITION BY partition_definition: Tùy chọn, định nghĩa phân vùng của dữ liệu. Nếu không chỉ định, toàn bộ dữ liệu sẽ được xem xét.
  • ORDER BY order_definition: Bắt buộc, xác định cách sắp xếp dữ liệu trước khi tính toán phân vị.

Ví dụ minh họa

Dưới đây là ví dụ cụ thể để giúp bạn hiểu rõ cách sử dụng CUME_DIST() trong MySQL:

Giả sử bạn có một bảng tên là employees với các cột id, name, và salary. Mục đích của bạn là tính toán phân vị của mức lương của từng nhân viên trong công ty.

SELECT
    id,
    name,
    salary,
    CUME_DIST() OVER (ORDER BY salary) AS cum_dist
FROM
    employees;

Kết quả trả về sẽ là:

id name salary cum_dist
1 Alice 3000 0.2
2 Bob 4000 0.4
3 Charlie 5000 0.6
4 David 6000 0.8
5 Eve 7000 1.0

Trong kết quả trên, cột cum_dist biểu thị phân vị của mức lương cho từng nhân viên:

  • Alice có mức lương 3000, đứng ở vị trí phân vị 20% (hay 0.2), nghĩa là 20% nhân viên có mức lương thấp hơn hoặc bằng Alice.
  • Tương tự, David với mức lương 6000 có phân vị 80% (hay 0.8), nghĩa là 80% nhân viên có mức lương thấp hơn hoặc bằng mức lương của David.

Sử dụng PARTITION BY

Nếu bạn muốn tính phân vị mức lương của nhân viên theo phòng ban, bạn có thể sử dụng PARTITION BY như sau:

SELECT
    department,
    id,
    name,
    salary,
    CUME_DIST() OVER (PARTITION BY department ORDER BY salary) AS cum_dist
FROM
    employees;

Cú pháp trên sẽ chia nhân viên theo từng phòng ban và tính phân vị trong từng phân vùng đó.

Lưu ý

  • CUME_DIST() luôn trả về giá trị từ 0.0 đến 1.0.
  • Kết quả của CUME_DIST() không bao giờ giảm, chỉ tăng hoặc giữ nguyên khi giá trị tiếp tục tăng.

Tóm lại, hàm CUME_DIST() là một công cụ mạnh mẽ trong MySQL giúp bạn phân tích và khám phá dữ liệu theo ngữ cảnh phân vị, giúp tối ưu quá trình ra quyết định và phân tích chi tiết hơn.

Comments