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

รูปแบบการทำรายงานจากสถานการณ์จริง

สร้างแดชบอร์ดรูปแบบคลาสสิก ได้แก่ เส้นโค้งการรักษาผู้ใช้ อันดับสูงสุด N รายการต่อหมวดหมู่ และการแบ่งเซสชัน ทั้งหมดด้วยฟังก์ชันหน้าต่าง

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

รูปแบบ: Top-N ต่อกลุ่ม

คำสั่งซื้อ 3 อันดับแรกต่อผู้ใช้:

WITH ranked AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
  FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;

รูปแบบ: ผลรวมสะสม

รายได้สะสมตามเวลา:

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue;

รูปแบบ: การเกิดขึ้นครั้งแรก

ครั้งแรกที่ผู้ใช้แต่ละคนดำเนินการแต่ละอย่าง:

SELECT user_id, action, MIN(ts) AS first_at
FROM events
GROUP BY user_id, action;

-- Or with window functions for full row:
WITH firsts AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id, action ORDER BY ts) AS rn
  FROM events
)
SELECT * FROM firsts WHERE rn = 1;

รูปแบบ: การรักษาผู้ใช้ตามกลุ่มรุ่น

จัดกลุ่มผู้ใช้ตามสัปดาห์ที่ลงทะเบียน และดูการรักษาผู้ใช้ในสัปดาห์ที่ N:

WITH cohorts AS (
  SELECT id AS user_id, date_trunc('week', created_at) AS cohort_week
  FROM users
),
activities AS (
  SELECT user_id, date_trunc('week', ts) AS active_week FROM events
)
SELECT c.cohort_week,
       (a.active_week - c.cohort_week) / 7 AS week_offset,
       COUNT(DISTINCT a.user_id) AS active
FROM cohorts c
JOIN activities a USING (user_id)
WHERE a.active_week >= c.cohort_week
GROUP BY c.cohort_week, week_offset
ORDER BY c.cohort_week, week_offset;

รูปแบบ: การวิเคราะห์กรวย

มีผู้ใช้กี่คนที่ไปถึงแต่ละขั้นตอน:

SELECT
  COUNT(*)                                  AS signed_up,
  COUNT(*) FILTER (WHERE first_login_at IS NOT NULL) AS logged_in,
  COUNT(*) FILTER (WHERE first_purchase_at IS NOT NULL) AS purchased
FROM users;

รูปแบบ: การแบ่งเป็นเซสชัน

จัดกลุ่มเหตุการณ์เป็นเซสชันเมื่อช่วงห่างมากกว่า 30 นาที:

WITH gaps AS (
  SELECT user_id, ts,
    CASE
      WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
           > INTERVAL '30 min'
      THEN 1 ELSE 0
    END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

รูปแบบ: การเปรียบเทียบช่วงเวลา

เปรียบเทียบเดือนปัจจุบันกับเดือนก่อนหน้า:

SELECT month, revenue,
       LAG(revenue) OVER (ORDER BY month) AS prev_month,
       revenue - LAG(revenue) OVER (ORDER BY month) AS delta,
       (revenue::FLOAT / NULLIF(LAG(revenue) OVER (ORDER BY month), 0) - 1) * 100 AS pct_change
FROM monthly_revenue
ORDER BY month;

รูปแบบ: ผลลัพธ์แบบหมุน

รูปแบบกว้างด้วย FILTER:

SELECT user_id,
       SUM(amount) FILTER (WHERE month = '2024-01') AS jan,
       SUM(amount) FILTER (WHERE month = '2024-02') AS feb,
       SUM(amount) FILTER (WHERE month = '2024-03') AS mar
FROM monthly_spend
GROUP BY user_id;

รูปแบบ: ผู้ใช้ที่ใช้งานวันนี้

DAU / WAU / MAU:

SELECT
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '1 day')  AS dau,
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '7 days') AS wau,
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '30 days') AS mau
FROM events;

รูปแบบ: การเติมช่วงที่ขาดหาย

วันที่ไม่มีเหตุการณ์ควรแสดงเป็น 0 ไม่ใช่หายไป:

SELECT day, COALESCE(COUNT(e.id), 0) AS events
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, INTERVAL '1 day') AS day
LEFT JOIN events e ON date_trunc('day', e.ts) = day
GROUP BY day
ORDER BY day;

การรวมฟังก์ชันหน้าต่างเพื่อค้นหาข้อมูลเชิงลึก

ใช้คอลัมน์จากหน้าต่างหลายคอลัมน์ในคิวรีเดียว อ่านง่ายและทำงานเร็ว:

SELECT day, revenue,
       LAG(revenue) OVER w               AS prev,
       AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_7d,
       SUM(revenue) OVER (ORDER BY day)  AS running_total
FROM daily_revenue
WINDOW w AS (ORDER BY day)
ORDER BY day;

สรุปทบทวน

รายงานส่วนใหญ่ประกอบด้วยรูปแบบไม่กี่แบบ ได้แก่ Top-N ผลรวมสะสม กลุ่มรุ่น กรวย เซสชัน การเปรียบเทียบช่วงเวลา ตารางหมุน และการเติมช่วงที่ขาดหาย เรียนรู้รูปแบบเหล่านี้ให้เชี่ยวชาญ แล้วคุณจะสร้าง SQL สำหรับแดชบอร์ดใด ๆ ได้

ตรวจสอบอย่างรวดเร็ว

คุณกำลังสร้างรายงาน “ผลิตภัณฑ์ 5 อันดับแรกต่อหมวดหมู่” ควรใช้รูปแบบ SQL ที่เหมาะสมแบบใด

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

บทเรียน “รูปแบบการทำรายงานจากสถานการณ์จริง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบการทำรายงานจากสถานการณ์จริง”

สร้างแดชบอร์ดรูปแบบคลาสสิก ได้แก่ เส้นโค้งการรักษาผู้ใช้ อันดับสูงสุด N รายการต่อหมวดหมู่ และการแบ่งเซสชัน ทั้งหมดด้วยฟังก์ชันหน้าต่าง คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “รูปแบบการทำรายงานจากสถานการณ์จริง” ใช้เวลานานแค่ไหน

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

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

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

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

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