ป้ายกำกับ: Data Transposition

Databae: สลับตารางแนวนอนและตารางแนวตั้งDatabae: สลับตารางแนวนอนและตารางแนวตั้ง

ในโลกของการวิเคราะห์ข้อมูล (Data Analytics) ข้อมูลมักจะถูกจัดเก็บในรูปแบบที่เหมาะสมกับการบันทึก (Normalized) ซึ่งหมายความว่าข้อมูลที่เกี่ยวข้องกับแต่ละรายการจะถูกแยกออกเป็นแถว (Rows) และคอลัมน์ (Columns) อย่างชัดเจน อย่างไรก็ตาม เมื่อเราต้องการนำข้อมูลไปแสดงผลหรือวิเคราะห์ในรูปแบบรายงาน (Reporting) บางครั้งเราจำเป็นต้องทำการ ‘สลับ’ โครงสร้างข้อมูล หรือที่เรียกว่า **Data Transposition** (การสลับแถวเป็นคอลัมน์ หรือคอลัมน์เป็นแถว)

การสลับตารางแนวนอน (Horizontal) และแนวตั้ง (Vertical) นี้เป็นทักษะสำคัญที่ Senior Data Architect ต้องรู้ เพื่อให้สามารถแปลงข้อมูลดิบให้อยู่ในรูปแบบที่พร้อมใช้งานสำหรับ Business Intelligence (BI) Tools หรือการแสดงผลใน Dashboard ได้อย่างมีประสิทธิภาพ บทความนี้จะเจาะลึกถึงวิธีการทำ Data Transposition โดยใช้คุณสมบัติขั้นสูงของระบบจัดการฐานข้อมูล PostgreSQL

💡 หลักการ Transpose ข้อมูลใน PostgreSQL

โดยพื้นฐานแล้ว PostgreSQL ไม่มีคำสั่ง `TRANSPOSE()` โดยตรงเหมือนในเครื่องมือ BI บางตัว แต่เราสามารถจำลองการทำงานนี้ได้โดยใช้เทคนิคที่เรียกว่า **Conditional Aggregation** ร่วมกับคำสั่ง `UNION ALL` หรือการใช้ `CASE` statements เพื่อเปลี่ยนค่าจากแถว (Row Value) ให้กลายเป็นคอลัมน์ (Column Header)

สมมติว่าเรามีตาราง `sales_data` ที่เก็บข้อมูลยอดขายรายเดือนในรูปแบบแนวตั้ง (Vertical) ซึ่งแต่ละแถวคือเดือน และแต่ละคอลัมน์คือข้อมูลที่แตกต่างกัน เราต้องการให้ข้อมูลเหล่านั้นถูกเปลี่ยนเป็นรูปแบบแนวนอน (Horizontal) เพื่อให้แต่ละเดือนเป็นคอลัมน์หลัก

ตัวอย่างการ Transpose ข้อมูล (Vertical to Horizontal)

พิจารณาตาราง `sales_data` ที่มีข้อมูลดังนี้:

  • | Month | Product_A_Sales | Product_B_Sales |
  • | Jan | 100 | 150 |
  • | Feb | 120 | 180 |

หากเราต้องการให้ Month เป็นแถวหลัก และ Product_A_Sales, Product_B_Sales เป็นคอลัมน์ เราจะต้องใช้การ Pivot ข้อมูล:

SQL

-- 1. สร้างตารางตัวอย่าง (Source Data: Vertical Format) </code>
CREATE TABLE sales_data (
    month VARCHAR(10),
    product_a_sales INT,
    product_b_sales INT
);

INSERT INTO sales_data (month, product_a_sales, product_b_sales) VALUES
('Jan', 100, 150),
('Feb', 120, 180);

-- 2. Query สำหรับ Transpose ข้อมูล (Pivot: Vertical to Horizontal) </code>
SELECT
    month,
    product_a_sales AS product_a_sales_jan,
    product_b_sales AS product_b_sales_jan
FROM sales_data
WHERE month = 'Jan';

-- หากต้องการให้ทุกเดือนอยู่ในแถวเดียว (ต้องใช้ UNION ALL หรือ CASE/GROUP BY ร่วมกัน) </code>
SELECT
    month,
    MAX(CASE WHEN product_a_sales IS NOT NULL THEN product_a_sales END) AS product_a_sales,
    MAX(CASE WHEN product_b_sales IS NOT NULL THEN product_b_sales END) AS product_b_sales
FROM sales_data
GROUP BY month;

🛠️ เทคนิคขั้นสูง: การใช้ CASE/GROUP BY สำหรับการ Pivot

ในกรณีที่ตารางมีจำนวนคอลัมน์ที่ต้อง Pivot มากกว่า 3-4 คอลัมน์ การใช้ `CASE` statement ร่วมกับ `GROUP BY` จะเป็นวิธีที่ยืดหยุ่นและเป็นมาตรฐานที่สุดในการจำลองการสลับโครงสร้างข้อมูล (Transposition) ใน PostgreSQL เนื่องจากเราสามารถกำหนดเงื่อนไข (Condition) เพื่อดึงค่าที่ต้องการมาแสดงในคอลัมน์ที่กำหนดได้อย่างแม่นยำ

✅ บทสรุป

การเข้าใจหลักการ Transposition Data เป็นหัวใจสำคัญของการเป็น System Specialist ที่สามารถออกแบบ Data Pipeline ได้อย่างสมบูรณ์ การสลับระหว่างโครงสร้างแนวตั้งและแนวนอนด้วย PostgreSQL ไม่ได้อาศัยคำสั่งเดียว แต่ต้องอาศัยการประยุกต์ใช้ฟังก์ชันเชิงตรรกะอย่าง `CASE` statement และการจัดกลุ่มด้วย `GROUP BY` เพื่อให้ได้ผลลัพธ์ที่ต้องการ

เมื่อคุณสามารถทำ Data Reshaping ได้อย่างเชี่ยวชาญ คุณจะไม่เพียงแค่เป็นนักเขียน SQL แต่ยังเป็นสถาปนิกข้อมูลที่สามารถเชื่อมโยงข้อมูลจากแหล่งที่มาที่แตกต่างกันให้กลายเป็นมุมมองเดียวที่พร้อมสำหรับการตัดสินใจทางธุรกิจได้อย่างแท้จริง