ฟังก์ชัน DENSE_RANK() ช่วยให้เราสามารถกำหนดอันดับที่ไม่ซ้ำกันให้กับแต่ละแถวภายในชุดผลลัพธ์ตามค่าในคอลัมน์ที่ระบุอีกหนึ่งคอลัมน์ คล้ายกับฟังก์ชัน rank() มาก แต่มีความแตกต่างเล็กน้อยในวิธีที่ฟังก์ชันจัดการกับบันทึกที่ซ้ำกัน
ในบทช่วยสอนนี้ เราจะสำรวจว่าฟังก์ชันนี้ทำงานอย่างไร ไวยากรณ์ที่ให้มา และเราสามารถใช้ฟังก์ชันนี้ในฐานข้อมูลได้อย่างไร
มันทำงานอย่างไร
ให้เราเริ่มต้นด้วยการอธิบายว่าฟังก์ชันนี้ทำงานอย่างไร โปรดจำไว้ว่าฟังก์ชันนี้อยู่ในระดับสูง และเราไม่สามารถอธิบายการใช้งานที่สำคัญได้
ฟังก์ชันนี้ทำงานโดยการกำหนดอันดับให้กับแต่ละแถวในชุดผลลัพธ์โดยเริ่มจากอันดับ 1 และเพิ่มขึ้น 1 สำหรับแต่ละค่าที่ไม่ซ้ำกันในคอลัมน์
แถวที่มีค่าใกล้เคียงกัน (ซ้ำกัน) ในคอลัมน์ที่ระบุจะถูกกำหนดด้วยอันดับเดียวกัน และแถวถัดไปที่มีค่าต่างกันจะถูกกำหนดด้วยอันดับถัดไปที่มีอยู่ โดยไม่มีช่องว่างใดๆ
ดังที่เราได้กล่าวไปแล้ว ฟังก์ชันนี้จะไม่ทิ้งช่องว่างใดๆ ที่มีค่าซ้ำกัน ซึ่งทำให้แตกต่างจากฟังก์ชัน rank()
การใช้งานฟังก์ชันหนาแน่น_rank() โดยทั่วไปคือการดำเนินการจัดอันดับ ตัวอย่างเช่น เราสามารถใช้มันเพื่อค้นหาระเบียน N อันดับต้นๆ เป็นต้น
ไวยากรณ์ของฟังก์ชัน:
ต่อไปนี้จะอธิบายไวยากรณ์ของฟังก์ชันหนาแน่น_rank():
DENSE_RANK() มากกว่า ([แบ่งตาม partition_expression, ... ]
คำสั่ง โดย sort_expression [ASC | ดีเอสซี], ...
-
ในไวยากรณ์ที่กำหนด:
- เราเริ่มต้นด้วยฟังก์ชันหนาแน่น_rank() เอง
- ส่วนคำสั่ง OVER ส่งสัญญาณการเริ่มต้นข้อกำหนดคุณลักษณะของฟังก์ชันหน้าต่าง นี่จะกำหนดวิธีการใช้การจัดอันดับภายในชุดผลลัพธ์
- PARTITION BY partition_expression เป็นส่วนคำสั่งทางเลือกที่ช่วยให้เราสามารถแบ่งพาร์ติชันชุดผลลัพธ์ออกเป็นกลุ่มหรือพาร์ติชันตามคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไป การจัดอันดับจะถูกใช้แยกกันในแต่ละพาร์ติชัน โดยจะมีการรีเซ็ตอันดับในพาร์ติชันใหม่
- ORDER BY sort_expression ระบุลำดับที่เราต้องการใช้เพื่อเรียงลำดับข้อมูลในพาร์ติชั่นผลลัพธ์
ข้อมูลตัวอย่าง
เพื่อสาธิตวิธีการใช้ฟังก์ชัน Dense_rank() ให้เราเริ่มต้นด้วยตารางที่มีข้อมูลตัวอย่าง ในกรณีของเรา เราใช้ตัวอย่างตาราง 'คำสั่งซื้อ' ดังนี้:
ตัวอย่างที่ 1: การใช้งานฟังก์ชัน Dense_Rank()
เราสามารถใช้ฟังก์ชันหนาแน่น_rank() เพื่อจัดอันดับคำสั่งซื้อผลลัพธ์ตามราคา พิจารณาแบบสอบถามตัวอย่างต่อไปนี้:
เลือกสั่งซื้อ_id,
ลูกค้า_ชื่อผู้ใช้,
สินค้า_ซื้อแล้ว,
DENSE_RANK() มากกว่า (
คำสั่ง โดย
ราคา ดิส
) ราคา_อันดับ
จาก
คำสั่ง o;
ในตัวอย่างที่กำหนด เราใช้ฟังก์ชันหนาแน่น_rank() เพื่อจัดอันดับข้อมูลตามราคาของคำสั่งซื้อ เราละเว้น PARTITION BY clause เนื่องจากเราไม่จัดกลุ่มข้อมูล
ผลลัพธ์ที่ได้จะเป็นดังนี้:
ตัวอย่างที่ 2: การแบ่งส่วนตาม
นอกจากนี้เรายังสามารถเพิ่มส่วนคำสั่ง PARTITION BY เพื่อจัดกลุ่มข้อมูลออกเป็นส่วนต่างๆ เช่น ตามผลิตภัณฑ์ที่ซื้อ
ตัวอย่างแบบสอบถามมีดังนี้:
เลือกสั่งซื้อ_id,
ลูกค้า_ชื่อผู้ใช้,
สินค้า_ซื้อแล้ว,
DENSE_RANK() สูงกว่า (
พาร์ติชันตาม product_purchased
คำสั่ง โดย
ราคา ดิส
) ราคา_อันดับ
จาก
คำสั่ง o;
ซึ่งควรจัดกลุ่มข้อมูลออกเป็นกลุ่มต่างๆ ตามกลุ่มผลลัพธ์ และใช้อันดับสำหรับรายการในแต่ละกลุ่ม
บทสรุป
ในโพสต์นี้ เราได้เรียนรู้พื้นฐานของการใช้และการทำงานกับฟังก์ชันหน้าต่างหนาแน่น_rank() ใน SQL เพื่อกำหนดอันดับให้กับค่าตามคอลัมน์ที่ระบุ