Window Functions

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Window Function คืออะไร?

คำนวณข้ามแถวโดยไม่ยุบข้อมูล

  • คำนวณผลลัพธ์ต่อแถวโดยใช้ชุดแถวที่เกี่ยวข้อง — เรียกว่า window
  • ต่างจาก GROUP BY: ใส่เท่าไหร่ ได้คืนเท่านั้น
  • กำหนดด้วย clause OVER

3 ประเภทหลัก:

  • การจัดอันดับ: ROW_NUMBER(), RANK(), DENSE_RANK()
  • การรวมค่า: SUM(), AVG(), COUNT() with OVER()
  • การนำทาง: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

เรียนเพิ่มเติมในคอร์ส Window Functions in Snowflake ของ DataCamp

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Clause OVER()

SELECT shipment_id
, region
, delivery_days
, AVG(delivery_days) 
    OVER ( PARTITION BY region ORDER BY dispatched_at ) AS avg_days_in_region 
FROM shipments;
SHIPMENT_ID REGION DELIVERY_DAYS RUNNING_AVG_DAYS_IN_REGION
SHP-001 EMEA 3 3.00
SHP-002 EMEA 5 4.00
SHP-003 EMEA 4 4.00
SHP-004 APAC 6 6.00
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

ROW_NUMBER vs RANK vs DENSE_RANK

SELECT
    shipment_id AS shipment, delivery_days AS days,
    ROW_NUMBER() OVER (ORDER BY delivery_days) AS row_number,
    RANK()       OVER (ORDER BY delivery_days) AS rank,
    DENSE_RANK() OVER (ORDER BY delivery_days) AS dense_rank
FROM shipments ORDER BY delivery_days;
SHIPMENT DELIVERY_DAYS ROW_NUMBER RANK DENSE_RANK
SHP-001 3 1 1 1
SHP-002 5 2 2 2
SHP-003 5 3 2 2
SHP-004 7 4 4 3
การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

LAG และ LEAD

ข้อมูลนำเข้า

ข้อมูลนำเข้าของ SQL LAG และ LEAD

ผลลัพธ์

ผลลัพธ์ของ LAG และ LEAD

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Running Totals และ Rolling Averages

ภาพแสดง window frames

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

ROWS vs RANGE frames

  • ROWS BETWEEN: นับตำแหน่งแถวจริง — ออฟเซตที่แน่นอนโดยไม่คำนึงถึงค่า
-- ROWS: always picks exactly N preceding physical rows
SUM(credits) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- Includes current row and two preceding
  • RANGE BETWEEN: ใช้ค่า จัดกลุ่มแถวที่มีค่า ORDER BY เท่ากันไว้ด้วยกัน
-- RANGE: includes all rows tied at the boundary value
SUM(credits) OVER (ORDER BY month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)

ใช้ Range เมื่อต้องการกำหนดขอบเขตด้วยค่า

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

ฝึกกันเลย!

การทำให้ Data Pipeline เป็นอัตโนมัติใน Snowflake

Preparing Video For Download...