โจทย์
- Mean (ค่าเฉลี่ย) = ผลรวมค่าทั้งหมด ÷ จำนวนค่า
- Mode (ฐานนิยม) = ค่าที่เกิดบ่อยที่สุดในชุดข้อมูล
ตัวอย่าง: Dataset {1, 2, 3, 4} → Mean = (1+2+3+4)/4 = 2.5
Dataset {1, 2, 3, 4, 1, 1, 1, 1} → Mode = 1 (เกิด 5 ครั้ง)
ตัวอย่างใน SQL Server (T-SQL)
1. สร้างตาราง
CREATE TABLE NUMBERS ( value INT );
2. เพิ่มข้อมูลพื้นฐาน
INSERT INTO NUMBERS VALUES (1); INSERT INTO NUMBERS VALUES (2); INSERT INTO NUMBERS VALUES (3); INSERT INTO NUMBERS VALUES (4);
3. หา Mean (Average)
SELECT AVG(value) FROM NUMBERS;
ผลลัพธ์: 2.5
4. เพิ่มข้อมูลซ้ำเพื่อทดสอบ Mode
INSERT INTO NUMBERS VALUES (1); INSERT INTO NUMBERS VALUES (1); INSERT INTO NUMBERS VALUES (1); INSERT INTO NUMBERS VALUES (1);
ตอนนี้ข้อมูล: 1, 2, 3, 4, 1, 1, 1, 1 (1 เกิด 5 ครั้ง)
5. หา Mode
SELECT TOP 1 value FROM NUMBERS GROUP BY value ORDER BY COUNT(*) DESC;
ผลลัพธ์: 1
อธิบาย Query Mode
GROUP BY valueจับกลุ่มค่าเหมือนกันCOUNT(*)นับจำนวนในแต่ละกลุ่มORDER BY COUNT(*) DESCเรียงกลุ่มที่มีจำนวนมากสุดขึ้นก่อนTOP 1เอาแค่กลุ่มแรก (ค่าที่เกิดบ่อยสุด)
MySQL Equivalent (สำหรับผู้ใช้ MySQL)
Mean
SELECT AVG(value) FROM numbers;
Mode
-- MySQL ใช้ LIMIT แทน TOP SELECT value FROM numbers GROUP BY value ORDER BY COUNT(*) DESC LIMIT 1;
กรณีมีหลาย Mode (Multimodal)
-- หา Mode ทั้งหมด (ทุกค่าที่มี Frequency สูงสุดเท่ากัน)
SELECT value, COUNT(*) AS freq
FROM numbers
GROUP BY value
HAVING COUNT(*) = (
SELECT MAX(cnt) FROM (SELECT COUNT(*) AS cnt FROM numbers GROUP BY value) t
);
สรุปฟังก์ชันสถิติใน SQL
| สถิติ | SQL Server | MySQL | PostgreSQL |
|---|---|---|---|
| Mean | AVG() | AVG() | AVG() |
| Median | PERCENTILE_CONT(0.5) | PERCENTILE_CONT(0.5) (8.0+) | PERCENTILE_CONT(0.5) |
| Mode | TOP 1 ... ORDER BY COUNT DESC | LIMIT 1 ... ORDER BY COUNT DESC | MODE() WITHIN GROUP |
| Std Dev | STDEV() / STDEVP() | STDDEV() / STDDEV_POP() | STDDEV_SAMP() / STDDEV_POP() |