Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

Mean และ Mode ใน SQL Server (T-SQL)

โจทย์

  • 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

  1. GROUP BY value จับกลุ่มค่าเหมือนกัน
  2. COUNT(*) นับจำนวนในแต่ละกลุ่ม
  3. ORDER BY COUNT(*) DESC เรียงกลุ่มที่มีจำนวนมากสุดขึ้นก่อน
  4. 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 ServerMySQLPostgreSQL
MeanAVG()AVG()AVG()
MedianPERCENTILE_CONT(0.5)PERCENTILE_CONT(0.5) (8.0+)PERCENTILE_CONT(0.5)
ModeTOP 1 ... ORDER BY COUNT DESCLIMIT 1 ... ORDER BY COUNT DESCMODE() WITHIN GROUP
Std DevSTDEV() / STDEVP()STDDEV() / STDDEV_POP()STDDEV_SAMP() / STDDEV_POP()