ฟังก์ชัน SQL lead() ช่วยให้คุณเข้าถึงแถวถัดไปจากแถวปัจจุบันที่ออฟเซ็ตเฉพาะ กล่าวโดยสรุป ฟังก์ชัน lead() ช่วยให้คุณเข้าถึงแถวถัดไปจากแถวปัจจุบันได้ ด้วยการระบุค่าออฟเซ็ต คุณสามารถเข้าถึงแถว 1, 2, 3 ฯลฯ ถัดไปจากแถวปัจจุบันได้
มันอยู่ตรงข้ามกับฟังก์ชัน lag() ซึ่งช่วยให้คุณเข้าถึงแถวก่อนหน้าได้
ฟังก์ชัน SQL Lead()
ไวยากรณ์ของฟังก์ชันมีดังนี้:
LEAD(value_expression, ออฟเซ็ต [, ค่าเริ่มต้น])
เกิน (
[แบ่งตาม partition_expression]
เรียงลำดับตาม sort_expression [ASC | รายละเอียด]
);
ต่อไปนี้เป็นข้อโต้แย้งที่ได้รับการสนับสนุน:
- ค่า_การแสดงออก – ระบุค่าตอบแทนของแถวก่อนหน้า นิพจน์ต้องประเมินเป็นค่าเดียว
- ชดเชย – ระบุจำนวนแถวที่ส่งต่อจากแถวปัจจุบันที่จะเข้าถึง
- ค่าเริ่มต้น – จะตั้งค่าเริ่มต้นหากออฟเซ็ตอยู่นอกขอบเขตของพาร์ติชัน ตามค่าเริ่มต้น ค่าจะถูกตั้งเป็น NULL
- แบ่งพาร์ติชั่นโดย – ระบุวิธีการแบ่งพาร์ติชันข้อมูล
- สั่งโดย – กำหนดรูปแบบลำดับสำหรับแถวในแต่ละพาร์ติชัน
การตั้งค่าข้อมูลตัวอย่าง
ก่อนที่เราจะเจาะลึกการทำงานของฟังก์ชัน lead() ให้เราเริ่มต้นด้วยการตั้งค่าตารางพื้นฐานเพื่อวัตถุประสงค์ในการสาธิต
สร้างผลิตภัณฑ์ตาราง (
product_id INT คีย์หลัก AUTO_INCREMENT,
ชื่อผลิตภัณฑ์ VARCHAR(255)
หมวดหมู่ VARCHAR (255)
ราคา ทศนิยม(10, 2),
ปริมาณ INT,
expiration_date วันที่,
บาร์โค้ด BIGINT
);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่า ('หมวกเชฟ 25 ซม.',
'เบเกอรี่',
24.67,
57,
'2023-09-09',
2854509564204);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ไข่นกกระทา - กระป๋อง',
'ตู้กับข้าว',
17.99 น.
67,
'2023-09-29',
1708039594250);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('กาแฟ - Egg Nog Capuccino',
'เบเกอรี่',
92.53,
10,
'2023-09-22',
8704051853058);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ลูกแพร์ - เต็มไปด้วยหนาม',
'เบเกอรี่',
65.29,
48,
'23-08-2023',
5174927442238);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('พาสต้า - ผมนางฟ้า',
'ตู้กับข้าว',
48.38,
59,
'2023-08-05',
8008123704782);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ไวน์ - Prosecco Valdobiaddene',
'ผลิต',
44.18,
3,
'2023-03-13',
6470981735653);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่า ('ขนมอบ - เฟรนช์มินิคละ',
'ตู้กับข้าว',
36.73,
52,
'2023-05-29',
5963886298051);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ส้ม - กระป๋อง, จีนกลาง',
'ผลิต',
65.0,
1,
'2023-04-20',
6131761721332);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('หมู-ไหล่',
'ผลิต',
55.55,
73,
'2023-05-01',
9343592107125);
แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('Dc Hikiage Hira Huba',
'ผลิต',
56.29,
53,
'2023-04-14',
3354910667072);
ตัวอย่างที่ 1:
ในกรณีนี้ เรามีสิทธิ์เข้าถึงตาราง 'ผลิตภัณฑ์' ซึ่งมีข้อมูลผลิตภัณฑ์ สมมติว่าเราต้องการรับบาร์โค้ดถัดไปจากแถวปัจจุบัน
เราสามารถใช้ฟังก์ชัน lead() ได้ดังนี้:
สมมติว่าเรามีตารางที่มีข้อมูลพนักงานดังต่อไปนี้:
เลือกชื่อผลิตภัณฑ์,
ราคา,
ตะกั่ว (บาร์โค้ด) เหนือ (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น next_item
จาก
ผลิตภัณฑ์พี;
รหัสที่กำหนดแบ่งพาร์ติชันข้อมูลตามหมวดหมู่ จากนั้นจะดึงบาร์โค้ดถัดไปในพาร์ติชันโดยใช้ฟังก์ชัน lead()
ผลลัพธ์ที่ได้จะเป็นดังนี้:
ตัวอย่างที่ 2:
หากไม่มีแถวถัดไปในคอลัมน์ใดคอลัมน์หนึ่ง (ไม่อยู่ในขอบเขต) ฟังก์ชันจะตั้งค่าเป็น NULL ดังที่แสดงในตัวอย่างก่อนหน้านี้
หากต้องการตั้งค่าเริ่มต้นสำหรับการเข้าถึงนอกขอบเขต เราสามารถดำเนินการดังต่อไปนี้:
เลือกชื่อผลิตภัณฑ์,
ราคา,
ลูกค้าเป้าหมาย (บาร์โค้ด, 1, 'N/A') เกิน (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น next_item
จาก
ผลิตภัณฑ์พี;
เราตั้งค่าเริ่มต้นเป็น 'N/A' สิ่งนี้ควรแทนที่ค่านอกขอบเขตใด ๆ ดังที่แสดงในผลลัพธ์ต่อไปนี้:
บันทึก : การตั้งค่าออฟเซ็ตเป็น 1 คล้ายกับการไม่ระบุค่าใดๆ
ตัวอย่างที่ 3:
สมมติว่าคุณต้องการเข้าถึงสองแถวถัดไปจากแถวปัจจุบัน เราสามารถทำได้โดยตั้งค่าออฟเซ็ตเป็น 2
แบบสอบถามตัวอย่างจะแสดงดังต่อไปนี้:
เลือกชื่อผลิตภัณฑ์,
ราคา,
ลูกค้าเป้าหมาย (บาร์โค้ด, 2, 'N/A') เกิน (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น next_item
จาก
ผลิตภัณฑ์พี;
แบบสอบถามนี้ส่งคืนสองแถวถัดไปในแต่ละพาร์ติชันดังแสดงต่อไปนี้:
ได้แล้ว!
บทสรุป
ในบทช่วยสอนนี้ เราได้เรียนรู้วิธีทำงานกับฟังก์ชัน lead() เพื่อรับรายการถัดไปจากแถวปัจจุบัน