Lab: Business Questions
ข้อมูลที่ใช้
Section titled “ข้อมูลที่ใช้”ตาราง students มีข้อมูลดังนี้:
| student_id | name | price | enrolled_on | active | |
|---|---|---|---|---|---|
| STD001 | สมชาย | somchai@mail.com | 4500.00 | 2025-03-15 | TRUE |
| STD002 | สมหญิง | somying@mail.com | 3200.00 | 2025-06-01 | TRUE |
| STD003 | วิชัย | wichai@mail.com | 7800.00 | 2024-11-20 | FALSE |
| STD004 | มานี | manee@mail.com | 4500.00 | 2025-01-10 | TRUE |
| STD005 | กมล | NULL | 2100.00 | 2025-08-22 | FALSE |
| STD006 | ปรีชา | preecha@mail.com | 9500.00 | 2024-09-05 | TRUE |
โจทย์: ตอบคำถามจาก Business Team
Section titled “โจทย์: ตอบคำถามจาก Business Team”-
“มีนักเรียนทั้งหมดกี่คน? กี่คนที่ active? กี่คนที่ inactive?”
Show Solution
SELECT COUNT(*) AS total_students,COUNT(*) FILTER (WHERE active) AS active_count,COUNT(*) FILTER (WHERE NOT active) AS inactive_countFROM students;ผลลัพธ์: total = 6, active = 4, inactive = 2
วิธีทางเลือก (ถ้า database ไม่รองรับ FILTER):
SELECT COUNT(*) AS total_students,SUM(CASE WHEN active THEN 1 ELSE 0 END) AS active_count,SUM(CASE WHEN NOT active THEN 1 ELSE 0 END) AS inactive_countFROM students; -
“รายได้รวมจากค่าเรียนเท่าไหร่? เฉพาะนักเรียนที่ยัง active ล่ะ?”
Show Solution
SELECT SUM(price) AS total_revenue,SUM(CASE WHEN active THEN price ELSE 0 END) AS active_revenueFROM students;ผลลัพธ์: total = 31600.00, active = 21700.00
-
“แต่ละไตรมาสของปี 2025 มีคนสมัครกี่คน? รายได้เท่าไหร่?”
Show Solution
SELECT EXTRACT(QUARTER FROM enrolled_on) AS quarter,COUNT(*) AS signups,SUM(price) AS revenueFROM studentsWHERE enrolled_on >= '2025-01-01'AND enrolled_on < '2026-01-01'GROUP BY EXTRACT(QUARTER FROM enrolled_on)ORDER BY quarter;ผลลัพธ์:
quarter signups revenue 1 2 8700.00 2 1 3200.00 3 1 2100.00 -
“มีนักเรียนกี่คนที่ไม่มีอีเมล? คิดเป็นกี่เปอร์เซ็นต์?”
Show Solution
SELECT COUNT(*) - COUNT(email) AS missing_email,ROUND((COUNT(*) - COUNT(email))::NUMERIC / COUNT(*) * 100, 1) AS missing_pctFROM students;ผลลัพธ์: missing_email = 1, missing_pct = 16.7%
-
“แสดงเฉพาะกลุ่ม active/inactive ที่ค่าเรียนเฉลี่ยมากกว่า 4000 บาท เรียงจากเฉลี่ยสูงสุด”
Show Solution
SELECT active,COUNT(*) AS num_students,AVG(price) AS avg_price,MIN(price) AS min_price,MAX(price) AS max_priceFROM studentsGROUP BY activeHAVING AVG(price) > 4000ORDER BY avg_price DESC;ผลลัพธ์:
active num_students avg_price min_price max_price TRUE 4 5425.00 3200.00 9500.00 FALSE 2 4950.00 2100.00 7800.00 ทั้งสองกลุ่มมีค่าเฉลี่ยเกิน 4000 จึงแสดงทั้งคู่