Hàm dẫn SQL

Ham Dan Sql



Hàm SQL lead() cho phép bạn truy cập hàng tiếp theo từ hàng hiện tại ở một độ lệch cụ thể. Nói tóm lại, hàm lead() cho phép bạn truy cập hàng tiếp theo từ hàng hiện tại. Bằng cách chỉ định giá trị offset, bạn có thể truy cập các hàng 1, 2, 3, v.v. tiếp theo từ hàng hiện tại.

Nó ngược lại với hàm lag() cho phép bạn truy cập các hàng trước đó.







Hàm SQL Lead()

Cú pháp hàm như sau:



LEAD(biểu thức value_, offset [, mặc định])
QUA (
[PHẦN THAM GIA THEO biểu thức phân vùng]
ĐẶT HÀNG THEO biểu_thức sắp xếp [ASC | MÔ TẢ]
);

Sau đây là các đối số được hỗ trợ:



  1. biểu thức giá trị – Nó chỉ định giá trị trả về của hàng trước đó. Biểu thức phải đánh giá thành một giá trị duy nhất.
  2. bù lại – Nó chỉ định có bao nhiêu hàng chuyển tiếp từ hàng hiện tại để truy cập.
  3. mặc định – Nó đặt giá trị mặc định nếu offset nằm ngoài phạm vi của phân vùng. Theo mặc định, giá trị được đặt thành NULL.
  4. Phân vùng theo – Nó chỉ định cách phân vùng dữ liệu.
  5. Đặt bởi – Nó thiết lập định dạng thứ tự cho các hàng trong mỗi phân vùng.

Thiết lập dữ liệu mẫu

Trước khi đi sâu vào hoạt động của hàm lead(), chúng ta hãy bắt đầu bằng cách thiết lập bảng cơ bản cho mục đích minh họa.





TẠO sản phẩm BẢNG (
sản phẩm_id INT KHÓA CHÍNH AUTO_INCREMENT,
tên_sản phẩm VARCHAR(255),
danh mục VARCHAR(255),
giá DECIMAL(10, 2),
số lượng INT,
ngày hết hạn DATE,
mã vạch BIGINT
);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Mũ đầu bếp 25cm',
'cửa hàng bánh mì',
24,67,
57,
'2023-09-09',
2854509564204);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Trứng cút - Đóng hộp',
'nhà bếp',
17,99,
67,
'2023-09-29',
1708039594250);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Cà phê - Egg Nog Capuccino',
'cửa hàng bánh mì',
92,53,
10,
'2023-09-22',
8704051853058);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
các giá trị ('Quả lê - Gai',
'cửa hàng bánh mì',
65,29,
48,
'2023-08-23',
5174927442238);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Pasta - Angel Hair',
'nhà bếp',
48,38,
59,
'2023-08-05',
8008123704782);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Rượu vang - Prosecco Valdobiaddene',
'sản xuất',
44,18,
3,
'2023-03-13',
6470981735653);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Bánh ngọt - Các loại nhỏ kiểu Pháp',
'nhà bếp',
36,73,
52,
'2023-05-29',
5963886298051);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
các giá trị ('Cam - Đóng hộp, Quan thoại',
'sản xuất',
65,0,
1,
'2023-04-20',
6131761721332);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Thịt lợn - Vai',
'sản xuất',
55,55,
73,
'2023-05-01',
9343592107125);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)

giá trị ('Dc Hikiage Hira Huba',
'sản xuất',
56,29,
53,
'2023-04-14',
3354910667072);

Ví dụ 1:

Trong trường hợp này, chúng ta có quyền truy cập vào bảng “products” chứa thông tin sản phẩm. Giả sử chúng ta muốn lấy mã vạch tiếp theo từ hàng hiện tại.

Chúng ta có thể sử dụng hàm lead() như sau:



Giả sử chúng ta có một bảng chứa thông tin nhân viên như sau:

lựa chọn
tên sản phẩm,
giá,
chì(mã vạch) qua (phân chia theo danh mục
đặt bởi
giá tăng dần) như next_item
từ
sản phẩm p;

Mã đã cho phân vùng dữ liệu dựa trên danh mục. Sau đó, nó tìm nạp mã vạch tiếp theo trong phân vùng bằng hàm lead().

Kết quả đầu ra như sau:

Ví dụ 2:

Nếu không có hàng tiếp theo trong một cột cụ thể (ngoài giới hạn), hàm sẽ đặt giá trị thành NULL như trong ví dụ trước.

Để đặt giá trị mặc định cho mọi quyền truy cập ngoài phạm vi, chúng tôi có thể thực hiện như sau:

lựa chọn
tên sản phẩm,
giá,
lead(barcode, 1, 'N/A') over (phân chia theo danh mục
đặt bởi
giá tăng dần) như next_item
từ
sản phẩm p;

Chúng tôi đặt giá trị mặc định thành “N/A”. Điều này sẽ thay thế mọi giá trị vượt quá giới hạn như được hiển thị trong kết quả đầu ra sau:

GHI CHÚ : Đặt offset thành 1 tương tự như không chỉ định bất kỳ giá trị nào.

Ví dụ 3:

Giả sử bạn muốn truy cập hai hàng tiếp theo từ hàng hiện tại. Chúng ta có thể làm điều đó bằng cách đặt giá trị offset thành 2.

Một truy vấn ví dụ được minh họa như sau:

lựa chọn
tên sản phẩm,
giá,
lead(barcode, 2, 'N/A') over (phân chia theo danh mục
đặt bởi
giá tăng dần) như next_item
từ
sản phẩm p;

Truy vấn này trả về hai hàng tiếp theo trong mỗi phân vùng như sau:

Ở đó bạn có nó!

Phần kết luận

Trong hướng dẫn này, chúng ta đã học cách làm việc với hàm lead() để lấy mục tiếp theo từ hàng hiện tại.