10 Mini Project และแนวทางต่อยอด
Mini Project และแนวทางต่อยอด
บทนี้รวมสิ่งที่เรียนมาเป็น mini project: วิเคราะห์ยอดขายจากข้อมูลลูกค้าและ order
Schema ตัวอย่าง
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
country TEXT
);
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER,
order_date DATE,
status TEXT,
amount DECIMAL(10, 2)
);
โจทย์ที่ 1: ยอดขายรวม
SELECT
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
AVG(amount) AS average_amount
FROM orders
WHERE status = 'paid';
โจทย์ที่ 2: ยอดขายแยกตามลูกค้า
SELECT
c.customer_id,
c.name,
SUM(o.amount) AS total_amount
FROM customers AS c
INNER JOIN orders AS o
ON c.customer_id = o.customer_id
WHERE o.status = 'paid'
GROUP BY c.customer_id, c.name
ORDER BY total_amount DESC;
โจทย์ที่ 3: ลูกค้าที่ไม่เคยซื้อ
SELECT
c.customer_id,
c.name
FROM customers AS c
LEFT JOIN orders AS o
ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;
โจทย์ที่ 4: Top Customer ด้วย CTE
WITH customer_sales AS (
SELECT
customer_id,
SUM(amount) AS total_amount
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
)
SELECT
c.name,
s.total_amount
FROM customer_sales AS s
INNER JOIN customers AS c
ON s.customer_id = c.customer_id
ORDER BY s.total_amount DESC
LIMIT 10;
Checklist เวลาเขียน SQL วิเคราะห์ข้อมูล
- เริ่มจาก
SELECT * LIMIT 10เพื่อดูหน้าตาข้อมูล - ตรวจสอบความหมายของ column
- กรองข้อมูลที่ไม่ต้องการออก
- รวมข้อมูลด้วย
GROUP BY - Join เฉพาะ table ที่จำเป็น
- ตั้ง alias ให้อ่านง่าย
- ตรวจสอบจำนวน row หลัง join
แนวทางต่อยอด
หลังจบพื้นฐานนี้ สามารถต่อยอดไปเรื่องต่อไปนี้
- Window function เช่น
ROW_NUMBER,LAG,SUM() OVER - Data warehouse และ partition
- Query optimization
- Data modeling
- dbt สำหรับจัดการ SQL transformation
- เชื่อม SQL กับ Python เพื่อทำ data pipeline
แบบฝึกหัดปิดคอร์ส
- หายอดขายรายวัน
- หาประเทศที่มียอดขายสูงสุด
- หาลูกค้าที่มียอดซื้อเฉลี่ยมากกว่า 1000
- หาจำนวน order แยกตาม status
- เขียน query แบบ CTE อย่างน้อย 1 ข้อ