อันดับโพสต์เกรส

Xandab Phost Ke Rs



ใน PostgreSQL ฟังก์ชัน rank() เป็นฟังก์ชันหน้าต่างที่ช่วยให้เราสามารถกำหนดอันดับให้กับแต่ละแถวภายในชุดผลลัพธ์ตามเกณฑ์การเรียงลำดับที่กำหนด เช่นเดียวกับฟังก์ชันหน้าต่างส่วนใหญ่ ฟังก์ชันอันดับมีประโยชน์ในการสืบค้นเชิงวิเคราะห์ เช่น การพิจารณาอันดับของแถวที่สัมพันธ์กับรายการอื่นๆ ในชุดผลลัพธ์ที่กำหนด

บทช่วยสอนนี้สำรวจวิธีการทำงานกับฟังก์ชัน PostgreSQL เรายังสำรวจไวยากรณ์ของฟังก์ชันและพารามิเตอร์ และดูตัวอย่างที่ใช้งานได้จริง

ฟังก์ชัน PostgreSQL Rank()

ต่อไปนี้แสดงไวยากรณ์ของฟังก์ชัน rank() ใน PostgreSQL:







RANK() มากกว่า (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

เราเริ่มต้นด้วยการเรียกใช้ฟังก์ชัน rank() จากนั้นเราจะใช้คีย์เวิร์ด OVER เพื่อระบุว่าเราต้องการดำเนินการฟังก์ชันหน้าต่าง



ถัดไปคือ PARTITION BY partition_expression ประโยคนี้แบ่งแถวออกเป็นพาร์ติชันต่างๆ ตามนิพจน์ที่กำหนด การจัดอันดับจะทำแยกกันในแต่ละพาร์ติชันโดยที่ค่าจำนวนเต็มของอันดับเริ่มต้นที่ 1 สำหรับพาร์ติชันใหม่แต่ละพาร์ติชัน



สุดท้าย เรามีคำสั่ง ORDER BY ซึ่งระบุคอลัมน์หรือนิพจน์ที่กำหนดลำดับแถว





ตัวอย่างฟังก์ชัน PostgreSQL Rank()

ข้อความค้นหาต่อไปนี้แสดงตัวอย่างพื้นฐานของการใช้ฟังก์ชัน rank() ของ PostgreSQL:

เลือกค่า RANK() OVER (ORDER BY value) AS rank
จาก (
ค่า (10), (20), (5), (15), (10)
) เป็นข้อมูล(ค่า);

ในตัวอย่างนี้ เราจัดอันดับค่าตามลำดับจากน้อยไปหามาก ค่าที่เกิดขึ้นสองครั้งถูกกำหนดด้วยอันดับเดียวกันเนื่องจากมีความคล้ายคลึงกันและปรากฏในตำแหน่งเดียวกันภายในคำสั่งซื้อ



ตารางผลลัพธ์มีดังนี้:

ค่า SELECT, RANK() OVER (PARTITION BY value % 2 ORDER BY value) AS อันดับ
จาก (
ค่า (10), (20), (5), (15), (10)
) เป็นข้อมูล(ค่า);

ตัวอย่างฟังก์ชัน PostgreSQL Rank() ที่มี Partition By Clause

พิจารณาตัวอย่างต่อไปนี้:

ค่า SELECT, RANK() OVER (PARTITION BY value % 2 ORDER BY value) AS อันดับ
จาก (
ค่า (10), (20), (5), (15), (10)
) เป็นข้อมูล(ค่า);

ในตัวอย่างนี้ เราเพิ่มส่วนคำสั่ง PARTITION BY ด้วยนิพจน์ที่ตรวจสอบว่าค่านั้นเป็นเลขคู่หรือเลขคี่ สิ่งนี้ควรจัดกลุ่มค่าออกเป็นสองส่วนอย่างมีประสิทธิภาพ: ส่วนหนึ่งสำหรับจำนวนคู่ (โดยที่เศษเป็น 0) และอีกส่วนสำหรับจำนวนคี่ (โดยที่เศษเป็น 1)

ชุดผลลัพธ์มีดังนี้:

ตัวอย่างฟังก์ชัน PostgreSQL Rank() โดยการรวมคุณสมบัติ SQL หลายตัวเข้าด้วยกัน

คุณยังสามารถสร้างข้อความค้นหาที่ซับซ้อนมากขึ้นได้โดยใช้ฟังก์ชัน rank() ตัวอย่างเช่น ใช้ฐานข้อมูล Pagila สมมติว่าเราต้องการเรียกลูกค้าห้าอันดับแรกโดยพิจารณาจากค่าเช่าทั้งหมดและกำหนดอันดับให้กับพวกเขา

เราสามารถใช้ฟังก์ชัน rank() ดังแสดงในแบบสอบถามต่อไปนี้:

เลือก customer_id, first_name, last_name, total_payments,
RANK() มากกว่า (ORDER BY total_payments DESC) AS rank
จาก (
เลือก c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
จากลูกค้า ค
เข้าร่วมการชำระเงิน p บน c.customer_id = p.customer_id
จัดกลุ่มตาม c.customer_id, c.first_name, c.last_name
) AS customer_payments
ORDER BY อันดับ
จำกัด 10;

ในตัวอย่างนี้ เราเลือก customer_id, first_name, last_name, total_payment และ rank() ที่กำหนด จากนั้น เราใช้ฟังก์ชัน rank() เพื่อกำหนดอันดับให้กับลูกค้าแต่ละรายตามยอดรวมของการชำระเงินที่เรียงลำดับจากมากไปน้อย

ข้อความค้นหาย่อยภายในช่วยให้เราสามารถคำนวณการชำระเงินทั้งหมดสำหรับลูกค้าแต่ละรายโดยเข้าร่วมลูกค้าและตารางการชำระเงิน จากนั้นเราจะจัดกลุ่มผลลัพธ์ตามคอลัมน์ customer_id, first_name และ last_name เพื่อเรียกผลรวมของการชำระเงินสำหรับลูกค้าแต่ละราย

สุดท้าย ในแบบสอบถามภายนอก เราใช้ฟังก์ชัน rank() กับชุดผลลัพธ์และเรียงลำดับตาม total_payments จากน้อยไปหามาก เรายังรวมคำสั่งจำกัดเพื่อดึงเฉพาะแถว 10 อันดับแรก

อย่างที่คุณเห็น คุณสามารถสร้างข้อมูลเชิงลึกได้มากขึ้นโดยการรวมคุณสมบัติ SQL หลายอย่างเข้าด้วยกัน เช่น การเรียงลำดับ การกรอง การรวม การรวม และอื่นๆ

บทสรุป

เราได้สำรวจวิธีที่เราสามารถทำงานร่วมกับฟังก์ชัน rank() ใน PostgreSQL เพื่อดึงข้อมูลอันดับของแถวที่กำหนดจากชุดผลลัพธ์ตามเงื่อนไขที่กำหนด เรายังพูดถึงวิธีการรวมฟังก์ชัน rank() กับเครื่องมือ SQL อื่นๆ เพื่อสร้างเคียวรีที่ซับซ้อนยิ่งขึ้น