กลับไปหน้าบทความ

อ่าน 4 นาที

ฟังก์ชันหน้าต่าง (SQL)

SQL

ในSQL ฟังก์ชันหน้าต่างหรือฟังก์ชันวิเคราะห์คือฟังก์ชันที่ใช้ค่าจากแถวเดียวหรือหลายแถวเพื่อส่งคืนค่าสำหรับแต่ละแถว (ซึ่งแตกต่างจากฟังก์ชันรวมที่ส่งคืนค่าเดียวสำหรับหลายแถว)...

ฟังก์ชันหน้าต่าง (SQL)

ในSQL ฟังก์ชันหน้าต่างหรือฟังก์ชันวิเคราะห์[ 1 ]คือฟังก์ชันที่ใช้ค่าจากแถวเดียวหรือหลายแถวเพื่อส่งคืนค่าสำหรับแต่ละแถว (ซึ่งแตกต่างจากฟังก์ชันรวมที่ส่งคืนค่าเดียวสำหรับหลายแถว) ฟังก์ชันหน้าต่างมีข้อกำหนด OVER ฟังก์ชันใดๆ ที่ไม่มีข้อกำหนด OVER จะไม่ใช่ฟังก์ชันหน้าต่าง แต่เป็นฟังก์ชันรวมหรือฟังก์ชันแถวเดียว (สเกลาร์) [ 2 ]

ตัวอย่าง

ตัวอย่างเช่น นี่คือแบบสอบถามที่ใช้ฟังก์ชันหน้าต่างเพื่อเปรียบเทียบเงินเดือนของพนักงานแต่ละคนกับเงินเดือนเฉลี่ยของแผนก (ตัวอย่างจาก เอกสาร PostgreSQL ): [ 3 ]

SELECT depname , empno , salary , avg ( salary ) OVER ( PARTITION BY depname ) FROM empsalary ;

ผลลัพธ์:

ชื่อแผนก | หมายเลขพนักงาน | เงินเดือน | เฉลี่ย ----------+-------+--------+---------------------- พัฒนา | 11 | 5200 | 5020.0000000000000000 พัฒนา | 7 | 4200 | 5020.0000000000000000 พัฒนา | 9 | 4500 | 5020.0000000000000000 พัฒนา | 8 | 6000 | 5020.0000000000000000 พัฒนา | 10 | 5200 | 5020.0000000000000000 บุคลากร | 5 | 3500 | 3700.0000000000000000 บุคลากร | 2 | 3900 | 3700.0000000000000000 ยอดขาย | 3 | 4800 | 4866.6666666666666667 ยอดขาย | 1 | 5000 | 4866.6666666666666667 ยอดขาย | 4 | 4800 | 4866.6666666666666667 (10 แถว) 

ข้อความPARTITION BYดังกล่าวจะจัดกลุ่มแถวเป็นพาร์ติชัน และฟังก์ชันจะถูกนำไปใช้กับแต่ละพาร์ติชันแยกกัน หากPARTITION BYละเว้นข้อความดังกล่าว (เช่น ข้อความว่างเปล่า ) ชุดผลลัพธ์OVER()ทั้งหมดจะถูกถือว่าเป็นพาร์ติชันเดียว[ 4 ]สำหรับแบบสอบถามนี้ เงินเดือนเฉลี่ยที่รายงานจะเป็นค่าเฉลี่ยที่คำนวณจากทุกแถว

ฟังก์ชันหน้าต่างจะถูกประเมินหลังจากรวมกลุ่ม (หลังจากGROUP BYข้อความและฟังก์ชันการรวมกลุ่มที่ไม่ใช่หน้าต่าง เช่น) [ 1 ]

ไวยากรณ์

ตามเอกสารของ PostgreSQL ฟังก์ชันหน้าต่างมีไวยากรณ์อย่างใดอย่างหนึ่งดังต่อไปนี้: [ 4 ]

function_name ([ expression [, expression ... ]]) OVER window_name function_name ([ expression [, expression ... ]]) OVER ( window_definition ) function_name ( * ) OVER window_name function_name ( * ) OVER ( window_definition )

ไวยากรณ์ ที่window_definitionใช้:

[ ชื่อหน้าต่างที่มีอยู่] [ นิพจน์การแบ่งพาร์ติชัน[, ... ] ] [ นิพจน์ การ เรียงลำดับ[ ASC | DESC | ตัวดำเนินการUSING ] [ ค่าว่าง{ ชื่อแรก| นามสกุล} ] [, ... ] ] [ เงื่อนไขเฟรม]

frame_clauseมีไวยากรณ์อย่างใดอย่างหนึ่งดังต่อไปนี้:

{ ช่วง| แถว| กลุ่ม} frame_start [ frame_exclusion ] { ช่วง| แถว| กลุ่ม} ระหว่างframe_start และframe_end [ frame_exclusion ]

frame_startและframe_endอาจเป็นUNBOUNDED PRECEDING, offset PRECEDING, CURRENT ROW, offset FOLLOWING, หรือUNBOUNDED FOLLOWINGอาจframe_exclusionเป็นEXCLUDE CURRENT ROW, EXCLUDE GROUP, EXCLUDE TIES, EXCLUDE NO OTHERSหรือ

expressionหมายถึงนิพจน์ใดๆ ที่ไม่มีการเรียกใช้ฟังก์ชันหน้าต่าง

สัญลักษณ์:

  • วงเล็บเหลี่ยม [] แสดงถึงข้อความเสริม
  • วงเล็บปีกกา {} แสดงถึงชุดตัวเลือกที่เป็นไปได้ที่แตกต่างกัน โดยแต่ละตัวเลือกจะคั่นด้วยเครื่องหมายขีดแนวตั้ง |

ตัวอย่าง

ฟังก์ชันหน้าต่างช่วยให้เข้าถึงข้อมูลในเรคอร์ดก่อนและหลังเรคอร์ดปัจจุบันได้[ 5 ] [ 6 ] [ 7 ] [ 8 ]ฟังก์ชันหน้าต่างจะกำหนดกรอบหรือหน้าต่างของแถวที่มีความยาวที่กำหนดรอบแถวปัจจุบัน และทำการคำนวณกับชุดข้อมูลในหน้าต่าง[ 9 ] [ 10 ]

 ชื่อ | ------------ แอรอน| <-- ก่อนหน้า (ไม่จำกัด) อมีเลีย| แอนดรูว์| เจมส์| จิลล์| จอห์นนี่| <-- แถวก่อนหน้าแถวแรก ไมเคิล | <-- แถวปัจจุบัน นิค | <-- แถวถัดไปแรก โอฟีเลีย| แซ็ค | <-- ติดตาม (ไม่จำกัด) 

ในตารางด้านบน คำสั่งค้นหาต่อไปนี้จะดึงค่าของหน้าต่างสำหรับแต่ละแถว โดยมีแถวก่อนหน้าหนึ่งแถวและแถวถัดไปหนึ่งแถว:

SELECT LAG ( name , 1 ) OVER ( ORDER BY name ) "prev" , name , LEAD ( name , 1 ) OVER ( ORDER BY name ) "next" FROM people ORDER BY name

ผลการค้นหาประกอบด้วยค่าต่อไปนี้:

| ก่อนหน้า | ชื่อ | ถัดไป | |----------|----------|----------| | (null)| แอรอน| อมีเลีย| | แอรอน | อมีเลีย | แอนดรูว์ | อมีเลีย | แอนดรูว์ | เจมส์ | | แอนดรูว์ | เจมส์ | จิลล์ | | เจมส์ | จิล | จอห์นนี่ | | จิลล์ | จอห์นนี่ | ไมเคิล | | จอห์นนี่ | ไมเคิล | นิค | | ไมเคิล | นิค | โอฟีเลีย | | นิค | โอฟีเลีย | แซ็ค | | โอฟีเลีย| แซ็ค| (null)| 

ประวัติศาสตร์

ฟังก์ชัน Window ได้ถูกรวมเข้าไว้ใน มาตรฐาน SQL:2003และมีการขยายฟังก์ชันการทำงานในข้อกำหนดเพิ่มเติมในภายหลัง[ 11 ]

มีการเพิ่มการรองรับการใช้งานฐานข้อมูลบางประเภทดังต่อไปนี้:

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Window_function_(SQL)&oldid=1340583826 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ฟังก์ชันหน้าต่าง (SQL)

ในSQL ฟังก์ชันหน้าต่างหรือฟังก์ชันวิเคราะห์คือฟังก์ชันที่ใช้ค่าจากแถวเดียวหรือหลายแถวเพื่อส่งคืนค่าสำหรับแต่ละแถว (ซึ่งแตกต่างจากฟังก์ชันรวมที่ส่งคืนค่าเดียวสำหรับหลายแถว)...

ตัวอย่าง

ตัวอย่างเช่น นี่คือแบบสอบถามที่ใช้ฟังก์ชันหน้าต่างเพื่อเปรียบเทียบเงินเดือนของพนักงานแต่ละคนกับเงินเดือนเฉลี่ยของแผนก (ตัวอย่างจาก เอกสาร PostgreSQL ): [ 3 ]

ไวยากรณ์

ตามเอกสารของ PostgreSQL ฟังก์ชันหน้าต่างมีไวยากรณ์อย่างใดอย่างหนึ่งดังต่อไปนี้: [ 4 ]

ประวัติศาสตร์

ฟังก์ชัน Window ได้ถูกรวมเข้าไว้ใน มาตรฐาน SQL:2003และมีการขยายฟังก์ชันการทำงานในข้อกำหนดเพิ่มเติมในภายหลัง [ 11 ]