Quản lý dữ liệu trong cơ sở dữ liệu là một nhiệm vụ thiết yếu và đòi hỏi sự chính xác. MySQL, với tính năng mạnh mẽ và linh hoạt, cung cấp nhiều công cụ để hỗ trợ trong việc này. Một trong số đó là lệnh ROWS, cho phép chúng ta quản lý và xử lý dữ liệu dòng một cách hiệu quả.
Tạo bảng và chèn dữ liệu
Trước khi đi vào chi tiết về cách sử dụng lệnh ROWS, hãy bắt đầu bằng việc tạo một bảng mẫu và chèn dữ liệu ví dụ:
CREATE TABLE sanpham (
id INT AUTO_INCREMENT PRIMARY KEY,
ten_vt VARCHAR(100),
gia FLOAT,
so_luong INT
);
INSERT INTO sanpham (ten_vt, gia, so_luong) VALUES
('Máy tính xách tay', 15000000, 10),
('Điện thoại thông minh', 7000000, 20),
('Máy tính bảng', 5000000, 15),
('Tai nghe', 300000, 50),
('Bàn phím', 200000, 30);
Lệnh ROWS và cửa sổ over
Lệnh ROWS thường được sử dụng trong bối cảnh việc quản lý cửa sổ (window) trong SQL. Cửa sổ cho phép chúng ta thực hiện các phép toán trên một bộ con của các dòng mà không cần phải nhóm các dòng đó lại:
SELECT ten_vt,
gia,
SUM(gia) OVER (ORDER BY gia ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS tong_gia
FROM sanpham;
Trong ví dụ này, chúng ta sử dụng lệnh OVER cùng với ROWS để tính tổng giá trị của các sản phẩm trong khoảng từ dòng trước đó đến dòng sau đó.
Các loại cửa sổ trong ROWS
Cú pháp tổng quát của lệnh ROWS là:
ROWS BETWEEN [preceding_bound] AND [following_bound]
preceding_bound
có thể là:- UNBOUNDED PRECEDING: bắt đầu từ đầu dữ liệu.
- N PRECEDING: N dòng trước dòng hiện tại.
following_bound
có thể là:- UNBOUNDED FOLLOWING: đến cuối dữ liệu.
- N FOLLOWING: N dòng sau dòng hiện tại.
Dưới đây là một số ví dụ cụ thể:
- Tính tổng giá trị từ đầu bảng đến dòng hiện tại:
SELECT ten_vt,
gia,
SUM(gia) OVER (ORDER BY gia ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS tong_gia
FROM sanpham;
- Tính tổng giá trị từ dòng hiện tại đến cuối bảng:
SELECT ten_vt,
gia,
SUM(gia) OVER (ORDER BY gia ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS tong_gia
FROM sanpham;
Sử dụng ROWS cùng các hàm phân tích khác
Ta có thể kết hợp lệnh ROWS với các hàm phân tích khác như AVG, MIN, MAX để tính toán các giá trị tương ứng trong khoảng cửa sổ:
SELECT ten_vt,
gia,
AVG(gia) OVER (ORDER BY gia ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS gia_trung_binh
FROM sanpham;
Trong ví dụ này, hàm AVG tính giá trị trung bình của 2 sản phẩm trước và sau mỗi dòng.
Kết luận
Lệnh ROWS trong MySQL là một công cụ mạnh mẽ để quản lý và xử lý dữ liệu trên cơ sở cửa sổ. Bằng việc sử dụng các tùy chọn khác nhau của ROWS BETWEEN, bạn có thể thực hiện các phép tính linh hoạt và hiệu quả hơn trên các dòng dữ liệu. Điều này giúp tăng cường khả năng phân tích dữ liệu và đưa ra các quyết định chính xác hơn trong mọi tình huống.
Comments