Subquery ในคำสั่ง FROM

การจัดการข้อมูลใน SQL

Mona Khalil

Data Scientist, Greenhouse Software

Subquery ใน FROM

  • จัดโครงสร้างและแปลงข้อมูล
    • แปลงข้อมูลจากแนวยาวเป็นแนวกว้างก่อน SELECT
    • กรองข้อมูลล่วงหน้า
  • คำนวณ aggregate ซ้อน aggregate
    • ทีมใด 3 ทีมที่มีค่าเฉลี่ยประตูเจ้าบ้านสูงสุด?
      1. คำนวณ AVG ของแต่ละทีม
      2. ดึง 3 ค่าสูงสุดจาก AVG
การจัดการข้อมูลใน SQL

FROM subqueries...

SELECT
  t.team_long_name AS team,
  AVG(m.home_goal) AS home_avg
FROM match AS m
LEFT JOIN team AS t
ON m.hometeam_id = t.team_api_id
WHERE season = '2011/2012'
GROUP BY team;
| team                 | home_avg         |
|----------------------|------------------|
| 1. FC Köln           | 1.13725490196078 |
| 1. FC Nürnberg       | 1.27058823529412 |
| 1. FSV Mainz 05      | 1.43697478991597 |
| AC Ajaccio           | 1.12280701754386 |
การจัดการข้อมูลใน SQL

...สู่คิวรีหลัก!


FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team)
การจัดการข้อมูลใน SQL

...สู่คิวรีหลัก!


FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
การจัดการข้อมูลใน SQL

...สู่คิวรีหลัก!

SELECT team, home_avg
FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
การจัดการข้อมูลใน SQL

...สู่คิวรีหลัก!

SELECT team, home_avg
FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
ORDER BY home_avg DESC
LIMIT 3;
| team           | home_avg |
|----------------|----------|
| FC Barcelona   | 3.8421   |
| Real Madrid CF | 3.6842   |
| PSV            | 3.3529   |
การจัดการข้อมูลใน SQL

สิ่งที่ควรจำ

  • สร้าง subquery ได้หลายตัวในคำสั่ง FROM เดียว

    • ตั้ง alias ให้แต่ละตัว!
    • JOIN เข้าด้วยกัน!
  • JOIN subquery กับตารางใน FROM ได้

    • ต้องมีคอลัมน์สำหรับ JOIN ในทั้งสองฝั่ง!
การจัดการข้อมูลใน SQL

มาฝึกกันเถอะ!

การจัดการข้อมูลใน SQL

Preparing Video For Download...