บทความนี้สาธิตการกรองข้อมูลด้วย Alias (ชื่อสม المستعارของคอลัมน์คำนวณ) ใน MySQL โดยใช้ HAVING แทน WHERE เนื่องจาก WHERE ไม่สามารถอ้างอิง Alias ได้
สร้างตารางและข้อมูลคะแนน
mysql> CREATE TABLE DemoTable755(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Score1 INT, Score2 INT
);
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable755(Score1, Score2) VALUES(30, 23), (50, 60), (89, 90), (99, 99), (40, 43);
คิวรีคำนวณผลรวมและกรองด้วย Alias ใน HAVING
mysql> SELECT Score1 + Score2 AS Result, DemoTable755.*
FROM DemoTable755
HAVING Result = 83;
ผลลัพธ์ (เฉพาะแถวที่ Score1+Score2 = 83)
+--------+----+--------+--------+
| Result | Id | Score1 | Score2 |
+--------+----+--------+--------+
| 83 | 5 | 40 | 43 |
+--------+----+--------+--------+
คำอธิบาย:
Score1 + Score2 AS Result- คำนวณผลรวมและตั้ง Alias เป็น ResultHAVING Result = 83- กรองด้วย Alias (WHERE ไม่ทำได้)HAVINGทำงานหลังGROUP BYหรือหลัง Select List (ถ้าไม่มี GROUP BY จะทำงานเหมือน WHERE แต่รองรับ Alias)- MySQL อนุญาตให้ใช้ HAVING โดยไม่มี GROUP BY (Non-standard แต่สะดวก)
วิธีมาตรฐาน (Standard SQL): ใช้ Subquery หรือ CTE:
SELECT * FROM (
SELECT Score1 + Score2 AS Result, * FROM DemoTable755
) t WHERE Result = 83;