0Pricing
SQL Academy · บทเรียน

OVER, PARTITION BY, ORDER BY

ทำความเข้าใจโมเดลฟังก์ชันหน้าต่าง: OVER, PARTITION BY (จัดกลุ่ม), ORDER BY (เรียงลำดับ) และความแตกต่างจาก GROUP BY

OVER, PARTITION BY, ORDER BY เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

ฟังก์ชันหน้าต่างคืออะไร

ฟังก์ชันหน้าต่างคำนวณค่าจากชุดแถวที่เกี่ยวข้องกับแถวปัจจุบัน โดยไม่ยุบผลลัพธ์เหมือนที่ GROUP BY ทำ คุณยังคงได้ทุกแถวและได้คอลัมน์สรุปรวมเพิ่มมาด้วย

ตัวอย่างพื้นฐาน

ค่าเฉลี่ยของยอดคำสั่งซื้อจากทั้งตาราง โดยแสดงในทุกแถว:

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

ส่วนคำสั่ง OVER

ส่วนคำสั่ง OVER (...) ใช้กำหนดหน้าต่าง วงเล็บว่างหมายถึง "ชุดผลลัพธ์ทั้งหมด"

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY: จัดกลุ่มหน้าต่าง

คล้ายกับ GROUP BY แต่แถวจะไม่ถูกยุบรวม:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

ORDER BY ในหน้าต่าง

ORDER BY ภายใน OVER ใช้กำหนดลำดับแถวสำหรับการคำนวณสะสม:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;

-- Running total per user, ordered by date.

หน้าต่างเทียบกับ GROUP BY

เปรียบเทียบกันโดยตรง:

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

แต่ละแถวกับกรอบที่แตกต่างกัน

"กรอบ" คือชุดแถวภายในกลุ่มย่อยที่ฟังก์ชันนำมาพิจารณา กรอบเริ่มต้นเมื่อมี ORDER BY คือ "ตั้งแต่ต้นจนถึงแถวปัจจุบัน" ซึ่งเป็นสิ่งที่ทำให้ได้ผลรวมสะสม

หน้าต่างที่มีชื่อ

หากมีหลายฟังก์ชันใช้หน้าต่างเดียวกัน ให้ตั้งชื่อหน้าต่างนั้นเพียงครั้งเดียว:

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

ฟังก์ชันรวมส่วนใหญ่ใช้เป็นฟังก์ชันหน้าต่างได้

COUNT, SUM, AVG, MIN และ MAX ทั้งหมดสามารถใช้กับหน้าต่างได้ ฟังก์ชันหน้าต่างเฉพาะทางยังเพิ่ม ROW_NUMBER, RANK, LAG/LEAD, NTILE และอื่น ๆ

ฟังก์ชันหน้าต่างทำงานหลัง WHERE

ลำดับเชิงตรรกะ: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT ดังนั้น WHERE จะกรองข้อมูลก่อนคำนวณฟังก์ชันหน้าต่าง

ข้อควรพิจารณาด้านประสิทธิภาพ

ฟังก์ชันหน้าต่างจำเป็นต้องจัดเรียงข้อมูล หรือใช้แฮช สำหรับกลุ่มย่อยขนาดใหญ่ ดัชนีบนคอลัมน์ (กลุ่มย่อย, ลำดับ) จะช่วยหลีกเลี่ยงขั้นตอนการจัดเรียง

สรุป

ฟังก์ชันหน้าต่างเพิ่มค่าสรุปรวมให้แต่ละแถว

  • OVER () = ผลลัพธ์ทั้งหมด
  • PARTITION BY = จัดกลุ่มหน้าต่าง
  • ORDER BY ในหน้าต่าง = เปิดใช้การคำนวณสะสม

ตรวจสอบความเข้าใจ

SUM(x) OVER (PARTITION BY user_id) คำนวณอะไร

คำถามที่พบบ่อย

บทเรียน “OVER, PARTITION BY, ORDER BY” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “OVER, PARTITION BY, ORDER BY” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “OVER, PARTITION BY, ORDER BY”

ทำความเข้าใจโมเดลฟังก์ชันหน้าต่าง: OVER, PARTITION BY (จัดกลุ่ม), ORDER BY (เรียงลำดับ) และความแตกต่างจาก GROUP BY คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “OVER, PARTITION BY, ORDER BY” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD และรูปแบบอนุกรมเวลา
  4. ผลรวมสะสมและค่าเฉลี่ยเคลื่อนที่
← กลับไปที่ SQL Academy