การแบ่งกลุ่มด้วย NTILE และ Cume_Dist
แบ่งแถวออกเป็นกลุ่มขนาดเท่ากันจำนวน N กลุ่มด้วย NTILE และคำนวณการกระจายสะสมด้วย CUME_DIST และ PERCENT_RANK
การแบ่งกลุ่มด้วย NTILE และ Cume_Dist เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
NTILE: กลุ่มขนาดเท่ากัน
NTILE(n) แบ่งแถวที่เรียงลำดับแล้วออกเป็นกลุ่มประมาณ n กลุ่มที่มีขนาดเท่ากัน:
SELECT id, total,
NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 2 = next, 3, 4 = top 25%กลุ่มเปอร์เซ็นไทล์
ใช้ NTILE(10) สำหรับเดไซล์ และ NTILE(100) สำหรับเปอร์เซ็นไทล์:
SELECT id, score,
NTILE(100) OVER (ORDER BY score DESC) AS percentile
FROM students;
-- percentile 1 = top 1%PERCENT_RANK
อันดับสัมพัทธ์ในรูปจำนวนทศนิยมช่วง [0, 1]:
SELECT id, score,
PERCENT_RANK() OVER (ORDER BY score) AS pct_rank
FROM students;
-- 0 for the lowest, 1 for the highest.CUME_DIST
สัดส่วนของแถวที่มีค่าไม่เกินค่าของแถวปัจจุบัน:
SELECT id, score,
CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM students;
-- "What share of students scored ≤ this one?"สถิติเปอร์เซ็นไทล์ด้วย PERCENTILE_CONT
คำนวณค่าที่เปอร์เซ็นไทล์หนึ่ง ๆ (การประมาณค่าแบบต่อเนื่อง):
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) AS median,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY total) AS p95,
PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY total) AS p99
FROM orders;PERCENTILE_DISC
คล้าย PERCENTILE_CONT แต่ส่งคืนค่าที่มีอยู่จริง แทนค่าที่ได้จากการประมาณ:
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY total)NTILE บนพาร์ทิชัน
แบ่งกลุ่มต่อผู้ใช้ ต่อหมวดหมู่ และอื่น ๆ:
SELECT user_id, total,
NTILE(4) OVER (PARTITION BY user_id ORDER BY total) AS user_quartile
FROM orders;ฮิสโตแกรมผ่าน NTILE
สร้างช่วงของฮิสโตแกรม:
SELECT bucket, MIN(total) AS bucket_min, MAX(total) AS bucket_max, COUNT(*)
FROM (
SELECT NTILE(10) OVER (ORDER BY total) AS bucket, total
FROM orders
) sub
GROUP BY bucket
ORDER BY bucket;การรวมข้อมูลต่อกลุ่ม
หลังจากแบ่งกลุ่มแล้ว ให้คำนวณสถิติต่อกลุ่ม:
SELECT user_quartile, COUNT(*) AS users, AVG(total) AS avg_total
FROM (
SELECT user_id, NTILE(4) OVER (ORDER BY total) AS user_quartile, total
FROM orders
) sub
GROUP BY user_quartile;การรวมฟังก์ชันหน้าต่าง
ผสมหลายฟังก์ชันไว้ในคิวรีเดียวเพื่อสร้างรายงานที่มีรายละเอียดครบถ้วน:
SELECT id, total,
NTILE(4) OVER w AS quartile,
PERCENT_RANK() OVER w AS pct_rank,
AVG(total) OVER w AS overall_avg
FROM orders
WINDOW w AS (ORDER BY total);กรณีที่ NTILE ทำให้เข้าใจผิด
ค่าที่เสมอกันใน ORDER BY อาจทำให้ขนาดกลุ่มไม่เท่ากัน (NTILE ไม่คำนึงถึงค่าที่เสมอกัน) ให้ใช้คอลัมน์สำหรับตัดสินกรณีเสมอกัน
สรุปทบทวน
NTILE + PERCENT_RANK + CUME_DIST ครอบคลุมการวิเคราะห์การกระจายข้อมูล
- NTILE สำหรับกลุ่มควอนไทล์
- PERCENTILE_CONT/DISC สำหรับสถิติ p50/p95/p99
- ใช้ร่วมกับ PARTITION BY เพื่อวิเคราะห์แยกตามกลุ่ม
ตรวจสอบอย่างรวดเร็ว
คุณต้องการหาค่าเวลาแฝง p95 จากคอลัมน์เวลาตอบสนอง ควรใช้ฟังก์ชันใด
คำถามที่พบบ่อย
บทเรียน “การแบ่งกลุ่มด้วย NTILE และ Cume_Dist” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแบ่งกลุ่มด้วย NTILE และ Cume_Dist” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแบ่งกลุ่มด้วย NTILE และ Cume_Dist”
แบ่งแถวออกเป็นกลุ่มขนาดเท่ากันจำนวน N กลุ่มด้วย NTILE และคำนวณการกระจายสะสมด้วย CUME_DIST และ PERCENT_RANK คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การแบ่งกลุ่มด้วย NTILE และ Cume_Dist” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เงื่อนไขกรอบ: ROWS เทียบกับ RANGE
- Lag/Lead กับหน้าต่างกรอบ
- การแบ่งกลุ่มด้วย NTILE และ Cume_Dist
- รูปแบบการทำรายงานจากสถานการณ์จริง