การใช้ Alias ในคำนวณ (Subquery/Derived Table)
ใน MySQL ไม่สามารถอ้างอิง Alias ในระดับเดียวกันได้ (เช่น SELECT a+b AS c, c*2 จะ Error) ต้องใช้ Subquery หรือ Derived Table:
วิธีที่ 1: Subquery ใน SELECT
SELECT Id, 100 AS MyNumber, (SELECT MyNumber) * Id AS MultiplyWith100
FROM AliasDemo;
วิธีที่ 2: Derived Table (FROM Subquery)
SELECT Id, MyNumber, MyNumber * Id AS MultiplyWith100
FROM (
SELECT Id, 100 AS MyNumber FROM AliasDemo
) AS t;
ตัวอย่างการใช้งาน
สร้างตารางและข้อมูล
CREATE TABLE AliasDemo (Id INT);
INSERT INTO AliasDemo VALUES (20), (30), (40);
คำสั่งใช้ Subquery ใน SELECT
SELECT Id, 100 AS MyNumber, (SELECT MyNumber) * Id AS MultiplyWith100
FROM AliasDemo;
ผลลัพธ์
+------+----------+-----------------+
| Id | MyNumber | MultiplyWith100 |
+------+----------+-----------------+
| 20 | 100 | 2000 |
| 30 | 100 | 3000 |
| 40 | 100 | 4000 |
ใช้ Alias โดยไม่มีตาราง (Single Execution)
SELECT 100 AS MyNumber, (SELECT MyNumber) * 10 AS MultiplyWith100;
+----------+-----------------+
| MyNumber | MultiplyWith100 |
+----------+-----------------+
| 100 | 1000 |
+----------+-----------------+
ข้อจำกัดของ Alias ใน MySQL
- ไม่สามารถใช้ Alias ใน
WHERE,GROUP BY,HAVINGระดับเดียวกันได้ - สามารถใช้ใน
ORDER BY,GROUP BY(MySQL อนุญาต),HAVING - ต้องใช้ Subquery/CTE หากต้องการนำ Alias ไปคำนวณต่อ
แนะนำ: ใช้ CTE (MySQL 8.0+)
WITH calculated AS (
SELECT Id, 100 AS MyNumber FROM AliasDemo
)
SELECT Id, MyNumber, MyNumber * Id AS MultiplyWith100
FROM calculated;