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

MySQL: สร้างคอลัมน์คำนวณหลายรูปแบบจากคอลัมน์เดียวด้วย UNION ALL

สร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable1987 ( UserValue int );
mysql> insert into DemoTable1987 values(4);
mysql> insert into DemoTable1987 values(5);
mysql> insert into DemoTable1987 values(6);
mysql> insert into DemoTable1987 values(7);

ข้อมูลในตาราง

+-----------+
| UserValue |
+-----------+
| 4         |
| 5         |
| 6         |
| 7         |
+-----------+

Query สร้างคอลัมน์ NewValue 2 รูปแบบ (x100 และ x50)

mysql> select UserValue, (UserValue*100) as NewValue from DemoTable1987
    union all
    select UserValue, (UserValue*50) as NewValue from DemoTable1987
    order by UserValue;

ผลลัพธ์

+-----------+----------+
| UserValue | NewValue |
+-----------+----------+
| 4         | 400      |
| 4         | 200      |
| 5         | 500      |
| 5         | 250      |
| 6         | 600      |
| 6         | 300      |
| 7         | 700      |
| 7         | 350      |
+-----------+----------+

อธิบาย

  • UNION ALL รวมผลลัพธ์ของ 2 Query เข้าด้วยกัน (ไม่ลบซ้ำ)
  • Query แรก: คูณ 100, Query ที่สอง: คูณ 50
  • ORDER BY UserValue เรียงผลลัพธ์รวมตามค่า UserValue

กรณีใช้งานจริง

  • สร้างข้อมูลทดสอบ (Test Data Generation)
  • คำนวณสถานการณ์ต่างๆ (Scenario Analysis) เช่น ราคาขาย, ราคาทุน, ราคาพิเศษ
  • Pivot/Unpivot ข้อมูลแบบ Manual

วิธีทันสมัยกว่า (MySQL 8.0+ CTE)

WITH base AS (SELECT UserValue FROM DemoTable1987)
SELECT UserValue, UserValue * 100 AS NewValue, 'x100' AS Type FROM base
UNION ALL
SELECT UserValue, UserValue * 50 AS NewValue, 'x50' AS Type FROM base
ORDER BY UserValue, Type;

เพิ่มคอลัมน์ระบุประเภทการคำนวณ

SELECT UserValue, (UserValue*100) AS NewValue, 'Multiply_100' AS CalcType FROM DemoTable1987
UNION ALL
SELECT UserValue, (UserValue*50) AS NewValue, 'Multiply_50' AS CalcType FROM DemoTable1987
ORDER BY UserValue, CalcType;