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

การแบ่งกลุ่มด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. เงื่อนไขกรอบ: ROWS เทียบกับ RANGE
  2. Lag/Lead กับหน้าต่างกรอบ
  3. การแบ่งกลุ่มด้วย NTILE และ Cume_Dist
  4. รูปแบบการทำรายงานจากสถานการณ์จริง
← กลับไปที่ SQL Academy