ส่วนนี้จะเป็นพื้นฐานความรู้ทางด้าน SQL ที่ผมศึกษา และที่ได้เรียนรู้จากอาจารย์ทุกท่าน

ต่อไปจะเป็นตัวอย่างการทำ Data cleaning และ สรุปข้อมูล เพื่อตอบคำถามจากชุดข้อมูล โดยใช้พื้นฐานทางด้าน SQL มาตอบคำถามนะครับ
Work hard 💼
Play harder 😉
Learn hardest 📝
Stay Focus 🎧
จากชุดข้อมูลต่อไปนี้ ::
ข้อมูลพื้นที่เสี่ยงน้ำท่วมรายเดือนของแต่ละตำบลทั่วประเทศ ที่ผ่านการวิเคราะห์จาก shapefile พื้นที่น้ำท่วมจากภาพถ่ายดาวเทียมระหว่างปี 2548-2564 (รอบ 17 ปี)
ของสำนักงานพัฒนาเทคโนโลยีอวกาศและภูมิสารสนเทศ (สทอภ.) โดยผลการวิเคราะห์จะจำแนกได้เป็น 3 ประเภท ได้แก่ เสี่ยงต่ำ เสี่ยงปานกลาง และเสี่ยงสูง
https://nt.data.go.th/dataset/flood-area
คำถามที่ 1 : จงหาว่าจังหวัดใดมีจำนวนตำบลที่อาจจะได้รับผลกระทบจาก ความเสี่ยงสูง จากน้ำท่วมมากที่สุด
SELECT
prov_e as city,
COUNT (risk) as count_city
from flood_risk_area
where risk = 'เสี่ยงสูง'
GROUP by city
order by count_city desc
วิธีการหาคำตอบ
- ขั้นตอนแรกทำการเปลี่ยนชื่อ coulumn : prov_e เป็น city เพื่อให้ง่ายต่อกาจดจำ
- จากนั้นใช้ ฟังก์ชั่น Count เพื่อนับจำนวนความเสี่ยงของน้ำท่วม เป็น Column ใหม่ชื่อว่า count_city รวมทุกอำเภอ และใช้ where เพื่อหาพื้นที่ที่มี “ความเสี่ยงสูง”
- ทำการดึงข้อมูลจาก dataset ที่ชื่อว่า flood_risk_area และทำการ Group by ด้วย column city แบ่งแยกออกมาเป็นจำนวน อำเภอ ตามชื่อจังหวัด
- จากนั้นเรียงข้อมูล เพื่อให้ได้จังหวัดที่มีความเสี่ยงของอำเภอสูงสุดมาอยู่ข้างบน โดยใช้ Order by count_city

คำถามข้อที่ 2 : จังหวัดพระนครศรีอยุธยา มีจำนวนตำบลที่เสี่ยงได้รับผลกระทบจากน้ำท่วมในระดับ “เสี่ยงสูง” มากที่สุดกี่ตำบล แยกข้อมูลตามอำเภอ
SELECT
amphoe_e ,
count(tambon_e) as count_tombon
FROM flood_risk_area
WHERE prov_e = 'Phra Nakhon Si Ayudhya'
and risk = 'เสี่ยงสูง'
GROUP by amphoe_e
order by count_tombon DESC
วิธีการหาคำตอบ
- เลือก Column อำเภอ และ นับจำนวนตำบลทั้งหมดจาก dataset ก้อนนี้
- โดยมีเงื่อนไขคือ ข้อมูลที่นับได้จะเอามาจาก ที่เฉพาะ column prov_e เป็นคำว่า ‘Phra Nakhon Si Ayudhya’ เท่านั้น
- และเพิ่มอีกเงื่อนไขว่าจะต้องให้ column risk มีค่าเป็น “เสี่ยงสูง” เท่านั้น
- ให้แสดงค่าออกมาเป็นจำนวนนับ แยกตามประเภท ชื่อใน column amphoe_e
- และเรียงข้อมูลจากมากไปน้อย

คำถามข้อที่ 3 : เขตใดบ้างใน กรุงเทพที่มีความเสี่ยงมากที่สุด และแต่ละเขตได้รับผลกระทบกี่แขวง
SELECT
amphoe_e as khet,
COUNT(tambon_e) as count_khwaeng
FROM flood_risk_area
where prov_e = 'Bangkok'
and risk = 'เสี่ยงปานกลาง'
GROUP by khet
วิธีการหาคำตอบ
- เลือกแสดง Column อำเภอ เปลี่ยนชื่อเป็น khet และนับจำนวนแขวง ให้แสดงที่ column count_khwaeng จาก dataset ก้อนนี้ และ column prov_e ต้องเป็นคำว่า ‘Bangkok’ เท่านั้น
- โดยเงื่อนไขที่ว่าจะต้องให้ column risk มีค่าเป็น “เสี่ยงปานกลาง” เท่านั้น
- เนื่องจากเสี่ยงสูงไม่มีข้อมูล
- ให้แสดงค่าออกมาเป็นจำนวนนับ แยกตามประเภท ชื่อใน column khet

คำถามข้อที่ 4 : จงหาว่าอำเภอ และ ตำบลใดในจังหวัดน่าน ที่ได้รับผลกระทบบ่อยที่สุดในช่วงเดือนสิงหาคมย้อนหลัง 17 ปี และระดับความเสี่ยงเป็นเท่าไหร่จากข้อมูลชุดนี้
select
tambon_e ,
amphoe_e ,
criteria,
risk,
sum (count_17_year) as Total_nan
FROM flood_risk_area
where prov_e = 'Nan'
AND month = 8
Group by tambon_e
วิธีการหาคำตอบ
- เลือกแสดง Column ตำบล / อำเภอ / ความถี่ของการประสบภัย / ระดับความเสี่ยง และ นับจำนวนครั้งที่ได้รับผลกระทบในรอบ 17 ปีที่ผ่านมา เปลี่ยนชื่อเป็น column Total_nan เพื่อให้ง่ายต่อการจดจำ ตามลำดับ จาก dataset ก้อนนี้
- โดยเงื่อนไขที่ว่าจะต้องให้ column prov_e มีค่าเป็น จังหวัด ‘น่าน’ และ column month มีค่าเป็น 8 (สิงหาคม) เท่านั้น
- ให้แสดงค่าออกมาเป็น อำเภอ และตำบล ที่ระดับความเสี่ยง และได้รับผลกระทบ มากที่สุด

คำถามที่ 5 : จังหวัดใดที่ได้รับผลกระทบจากน้ำท่วมน้อยที่สุด
SELECT prov_e as city ,
sum (count_17_year) as count_city
FROM flood_risk_area
GROUP by prov_e
ORDER by count_city
วิธีการหาคำตอบ
- เลือกแสดง column prov_e เปลี่ยนชื่อเป็น city คือจังหวัด และจำนวนผลรวมของการได้รับผลกระทบย้อนหลัง 17 ปี แสดงค่าเป็น column count_city จาก dataset ก้อนนี้
- โดยแสดงค่าตาม จังหวัดที่ได้ผลกระทบ
- เมื่อได้ค่าเรียบร้อย ให้ทำการเรียงลำดับจาก น้อยไปมาก เพื่อให้ง่ายต่อการตรวจสอบ
