SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม - KDnuggets

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม - KDnuggets

โหนดต้นทาง: 2805506

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

วิทยาศาสตร์ข้อมูลเป็นสาขาสหวิทยาการที่ต้องอาศัยการดึงข้อมูลเชิงลึกและการตัดสินใจโดยใช้ข้อมูลจำนวนมหาศาลจากข้อมูลจำนวนมหาศาล เครื่องมือพื้นฐานอย่างหนึ่งในกล่องเครื่องมือของนักวิทยาศาสตร์ข้อมูลคือ SQL (Structured Query Language) ซึ่งเป็นภาษาการเขียนโปรแกรมที่ออกแบบมาเพื่อการจัดการและจัดการฐานข้อมูลเชิงสัมพันธ์

ในบทความนี้ ฉันจะเน้นไปที่หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ SQL: การรวม

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

มีหลายคำ ประเภทของการรวม SQL:

  • การเข้าร่วมภายใน
  • การรวมภายนอกด้านซ้าย
  • การรวมภายนอกด้านขวา
  • การรวมภายนอกแบบเต็ม
  • เข้าร่วมข้าม

มาอธิบายแต่ละประเภทกันดีกว่า

การรวมภายในจะส่งกลับเฉพาะแถวที่มีการจับคู่ในทั้งสองตารางที่ถูกรวมเข้าด้วยกัน โดยจะรวมแถวจากสองตารางตามคีย์หรือคอลัมน์ที่ใช้ร่วมกัน โดยละทิ้งแถวที่ไม่ตรงกัน

เราเห็นภาพนี้ในลักษณะดังต่อไปนี้
 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

ใน SQL การรวมประเภทนี้ดำเนินการโดยใช้คำสำคัญ JOIN หรือ INNER JOIN

การรวมภายนอกด้านซ้ายจะส่งกลับแถวทั้งหมดจากตารางด้านซ้าย (หรือตารางแรก) และแถวที่ตรงกันจากตารางด้านขวา (หรือตารางที่สอง) หากไม่มีค่าที่ตรงกัน ระบบจะส่งกลับค่า NULL สำหรับคอลัมน์จากตารางด้านขวา

เราสามารถเห็นภาพมันได้แบบนี้

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

เมื่อต้องการใช้การรวมนี้ใน SQL คุณสามารถทำได้โดยใช้คีย์เวิร์ด LEFT OUTER JOIN หรือ LEFT JOIN นี่คือบทความที่พูดถึง การรวมด้านซ้ายเทียบกับการรวมภายนอกด้านซ้าย.

การรวมทางขวาเป็นสิ่งที่ตรงกันข้ามกับการรวมทางซ้าย โดยจะส่งกลับแถวทั้งหมดจากตารางด้านขวาและแถวที่ตรงกันจากตารางด้านซ้าย หากไม่มีค่าที่ตรงกัน ระบบจะส่งกลับค่า NULL สำหรับคอลัมน์จากตารางด้านซ้าย

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

ใน SQL การรวมประเภทนี้จะดำเนินการโดยใช้คำสำคัญ RIGHT OUTER JOIN หรือ RIGHT JOIN

การรวมภายนอกแบบเต็มจะส่งกลับแถวทั้งหมดจากทั้งสองตาราง โดยจับคู่แถวหากเป็นไปได้ และกรอกค่า NULL สำหรับแถวที่ไม่ตรงกัน

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

คำสำคัญใน SQL สำหรับการรวมนี้คือ FULL OUTER JOIN หรือ FULL JOIN

การรวมประเภทนี้จะรวมแถวทั้งหมดจากตารางหนึ่งเข้ากับแถวทั้งหมดจากตารางที่สอง กล่าวอีกนัยหนึ่ง มันจะส่งคืนผลคูณคาร์ทีเซียน กล่าวคือ ชุดค่าผสมที่เป็นไปได้ทั้งหมดของแถวของตารางทั้งสอง

นี่คือการแสดงภาพที่จะทำให้เข้าใจได้ง่ายขึ้น

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
ภาพโดยผู้เขียน
 

เมื่อเข้าร่วมแบบข้ามใน SQL คำสำคัญคือ CROSS JOIN

ในการดำเนินการรวมใน SQL คุณต้องระบุตารางที่เราต้องการรวม คอลัมน์ที่ใช้สำหรับการจับคู่ และประเภทของการรวมที่เราต้องการดำเนินการ ไวยากรณ์พื้นฐานสำหรับการเข้าร่วมตารางใน SQL มีดังนี้:

SELECT columns
FROM table1
JOIN table2
ON table1.column = table2.column;

 

ตัวอย่างนี้แสดงวิธีการใช้ JOIN

คุณอ้างอิงตารางแรก (หรือซ้าย) ในส่วนคำสั่ง FROM จากนั้นคุณติดตามด้วย JOIN และอ้างอิงตารางที่สอง (หรือขวา)

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

หมายเหตุ: คีย์หลักคือตัวระบุที่ไม่ซ้ำกันสำหรับแต่ละระเบียนในตาราง Foreign Key จะสร้างการเชื่อมโยงระหว่างสองตาราง กล่าวคือ เป็นคอลัมน์ในตารางที่สองที่อ้างอิงถึงตารางแรก เราจะแสดงให้คุณเห็นในตัวอย่างว่านั่นหมายความว่าอย่างไร

หากคุณต้องการใช้ LEFT JOIN, RIGHT JOIN หรือ FULL JOIN คุณเพียงใช้คำหลักเหล่านี้แทน JOIN ส่วนอื่นๆ ในโค้ดจะเหมือนกันทุกประการ!

สิ่งต่าง ๆ เล็กน้อยกับ CROSS JOIN โดยธรรมชาติแล้วคือการรวมแถวทั้งหมดจากทั้งสองตารางเข้าด้วยกัน นั่นเป็นสาเหตุที่ไม่จำเป็นต้องใช้คำสั่งย่อย ON และไวยากรณ์มีลักษณะเช่นนี้

SELECT columns
FROM table1
CROSS JOIN table2;

 

กล่าวอีกนัยหนึ่ง คุณเพียงอ้างอิงตารางหนึ่งใน FROM และตารางที่สองใน CROSS JOIN

หรือคุณสามารถอ้างอิงทั้งสองตารางใน FROM และคั่นด้วยเครื่องหมายจุลภาค ซึ่งเป็นการจดชวเลขสำหรับ CROSS JOIN

SELECT columns
FROM table1, table2;

นอกจากนี้ยังมีวิธีหนึ่งในการเข้าร่วมตารางโดยเฉพาะ นั่นก็คือการเข้าร่วมตารางด้วยตัวมันเอง สิ่งนี้เรียกว่าการเข้าร่วมโต๊ะด้วยตนเอง

การเข้าร่วมไม่ใช่ประเภทที่ชัดเจนอย่างแน่นอน เนื่องจากประเภทการเข้าร่วมใดๆ ที่กล่าวถึงข้างต้นสามารถนำมาใช้สำหรับการเข้าร่วมด้วยตนเองได้

ไวยากรณ์สำหรับการเข้าร่วมด้วยตนเองนั้นคล้ายกับสิ่งที่ฉันแสดงให้คุณเห็นก่อนหน้านี้ ข้อแตกต่างที่สำคัญคือตารางเดียวกันมีการอ้างอิงใน FROM และ JOIN

SELECT columns
FROM table1 t1
JOIN table1 t2
ON t1.column = t2.column;

 

นอกจากนี้ คุณต้องให้นามแฝงสองรายการแก่ตารางเพื่อแยกความแตกต่างระหว่างกัน สิ่งที่คุณกำลังทำคือการเข้าร่วมโต๊ะด้วยตัวมันเองและถือว่ามันเป็นสองตาราง

ฉันแค่อยากจะพูดถึงเรื่องนี้ที่นี่ แต่ฉันจะไม่ลงรายละเอียดเพิ่มเติม หากคุณสนใจที่จะเข้าร่วมด้วยตนเอง โปรดดูคำแนะนำที่มีภาพประกอบนี้ที่ เข้าร่วมด้วยตนเองใน SQL.

ถึงเวลาที่จะแสดงให้คุณเห็นว่าทุกสิ่งที่ฉันกล่าวถึงนั้นใช้งานได้จริงอย่างไร ฉันจะใช้ คำถามสัมภาษณ์ SQL JOIN จาก StrataScratch เพื่อแสดงการรวมแต่ละประเภทที่แตกต่างกันใน SQL

1. เข้าร่วมตัวอย่าง

คำถามนี้โดย Microsoft ต้องการให้คุณแสดงรายการแต่ละโครงการและคำนวณงบประมาณของโครงการโดยพนักงาน

โครงการราคาแพง

“เมื่อพิจารณาจากรายชื่อโครงการและพนักงานที่เชื่อมโยงกับแต่ละโครงการ ให้คำนวณตามจำนวนงบประมาณโครงการที่จัดสรรให้กับพนักงานแต่ละคน ผลลัพธ์ควรรวมชื่อโครงการและงบประมาณโครงการปัดเศษให้เป็นจำนวนเต็มที่ใกล้เคียงที่สุด เรียงลำดับรายการของคุณตามโครงการที่มีงบประมาณสูงสุดต่อพนักงานก่อน”

ข้อมูล

คำถามให้สองตาราง

ms_projects

ID: int
ชื่อเรื่อง: วาร์ชาร์
งบประมาณ: int

ms_emp_projects

emp_id: int
โครงการ_id: int

ตอนนี้รหัสคอลัมน์ในตาราง ms_projects คือคีย์หลักของตาราง คอลัมน์เดียวกันนี้สามารถพบได้ในตาราง ms_emp_projectsแม้ว่าจะมีชื่ออื่น: project_id นี่คือคีย์นอกของตาราง โดยอ้างอิงถึงตารางแรก

ฉันจะใช้สองคอลัมน์นี้เพื่อรวมตารางในโซลูชันของฉัน

รหัส

SELECT title AS project, ROUND((budget/COUNT(emp_id)::FLOAT)::NUMERIC, 0) AS budget_emp_ratio
FROM ms_projects a
JOIN ms_emp_projects b ON a.id = b.project_id
GROUP BY title, budget
ORDER BY budget_emp_ratio DESC;

 

ฉันเข้าร่วมทั้งสองตารางโดยใช้ JOIN โต๊ะ ms_projects มีการอ้างอิงใน FROM ในขณะที่ ms_emp_projects มีการอ้างอิงหลังจาก JOIN ฉันตั้งชื่อแทนให้กับทั้งสองตาราง ทำให้ฉันไม่สามารถใช้ชื่อยาวของตารางได้ในภายหลัง

ตอนนี้ ฉันต้องระบุคอลัมน์ที่ฉันต้องการรวมตาราง ฉันได้บอกไปแล้วว่าคอลัมน์ใดเป็นคีย์หลักในตารางหนึ่งและเป็นคีย์ต่างประเทศในอีกตารางหนึ่ง ดังนั้นฉันจะใช้คอลัมน์เหล่านี้ที่นี่

ฉันเท่ากับสองคอลัมน์นี้เพราะฉันต้องการรับข้อมูลทั้งหมดที่รหัสโครงการเหมือนกัน ฉันยังใช้นามแฝงของตารางที่หน้าแต่ละคอลัมน์ด้วย

ตอนนี้ฉันสามารถเข้าถึงข้อมูลในทั้งสองตารางแล้ว ฉันสามารถแสดงรายการคอลัมน์ใน SELECT ได้ คอลัมน์แรกคือชื่อโครงการ และคอลัมน์ที่สองถูกคำนวณ

การคำนวณนี้ใช้ฟังก์ชัน COUNT() เพื่อนับจำนวนพนักงานตามแต่ละโครงการ จากนั้นฉันก็แบ่งงบประมาณของแต่ละโครงการด้วยจำนวนพนักงาน ฉันยังแปลงผลลัพธ์เป็นค่าทศนิยมและปัดเศษให้เป็นทศนิยมศูนย์

เอาท์พุต

นี่คือสิ่งที่แบบสอบถามส่งคืน

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม

2. ตัวอย่างการเข้าร่วมด้านซ้าย

มาฝึกเข้าร่วมนี้กัน คำถามสัมภาษณ์ Airbnb. ต้องการให้คุณค้นหาจำนวนคำสั่งซื้อ จำนวนลูกค้า และต้นทุนรวมของคำสั่งซื้อสำหรับแต่ละเมือง

คำสั่งซื้อและรายละเอียดของลูกค้า

“ค้นหาจำนวนคำสั่งซื้อ จำนวนลูกค้า และต้นทุนรวมของคำสั่งซื้อสำหรับแต่ละเมือง รวมเฉพาะเมืองที่ทำการสั่งซื้ออย่างน้อย 5 รายการ และนับลูกค้าทั้งหมดในแต่ละเมือง แม้ว่าพวกเขาจะไม่ได้ทำการสั่งซื้อก็ตาม

ส่งออกการคำนวณแต่ละครั้งพร้อมกับชื่อเมืองที่เกี่ยวข้อง”

ข้อมูล

คุณได้รับตาราง ลูกค้า และ คำสั่งซื้อ.

ลูกค้า

ID: int
ชื่อจริง: วาร์ชาร์
นามสกุล: วาร์ชาร์
เมือง: วาร์ชาร์
ที่อยู่: วาร์ชาร์
หมายเลขโทรศัพท์: วาร์ชาร์

คำสั่งซื้อ

ID: int
cust_id: int
วันสั่ง: วันเวลา
สั่งซื้อ_รายละเอียด: วาร์ชาร์
ยอดรวม_การสั่งซื้อ_ต้นทุน: int

คอลัมน์ที่ใช้ร่วมกันเป็นรหัสจากตาราง ลูกค้า และ cust_id จากตาราง คำสั่งซื้อ. ฉันจะใช้คอลัมน์เหล่านี้เพื่อรวมตาราง

รหัส

ต่อไปนี้เป็นวิธีการแก้ปัญหานี้โดยใช้ LEFT JOIN

SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM customers c
LEFT JOIN orders o ON c.id = o.cust_id
GROUP BY c.city
HAVING COUNT(o.id) >=5;

 

ฉันอ้างอิงตาราง ลูกค้า ใน FROM (นี่คือตารางด้านซ้ายของเรา) และ LEFT JOIN ด้วย คำสั่งซื้อ ในคอลัมน์รหัสลูกค้า

ตอนนี้ฉันสามารถเลือกเมือง ใช้ COUNT() เพื่อรับจำนวนคำสั่งซื้อและลูกค้าตามเมือง และใช้ SUM() เพื่อคำนวณต้นทุนรวมของคำสั่งซื้อตามเมือง

หากต้องการคำนวณตามเมือง ฉันจะจัดกลุ่มผลลัพธ์ตามเมือง

มีคำขอพิเศษอย่างหนึ่งในคำถาม: “รวมเฉพาะเมืองที่มีคำสั่งซื้ออย่างน้อย 5 รายการ…” ฉันใช้ HAVING เพื่อแสดงเฉพาะเมืองที่มีคำสั่งซื้อตั้งแต่ XNUMX รายการขึ้นไปเพื่อให้บรรลุเป้าหมายนั้น

คำถามคือทำไมฉันถึงใช้ LEFT JOIN และไม่ สมัคร? เบาะแสอยู่ในคำถาม:”...และนับลูกค้าทั้งหมดในแต่ละเมือง แม้ว่าพวกเขาจะไม่ได้สั่งซื้อก็ตาม” อาจเป็นไปได้ว่าลูกค้าบางรายไม่ได้ทำการสั่งซื้อ ซึ่งหมายความว่าฉันต้องการแสดงลูกค้าทั้งหมดจากโต๊ะ ลูกค้าซึ่งเหมาะกับคำจำกัดความของ LEFT JOIN อย่างสมบูรณ์แบบ

หากฉันใช้ JOIN ผลลัพธ์คงจะผิด เพราะฉันจะพลาดลูกค้าที่ไม่ได้ส่งคำสั่งซื้อใดๆ

หมายเหตุ: ความซับซ้อนของการเข้าร่วมใน SQL ไม่ได้สะท้อนให้เห็นในรูปแบบไวยากรณ์ แต่ในความหมาย! อย่างที่คุณเห็น การรวมแต่ละรายการจะเขียนในลักษณะเดียวกัน มีเพียงคำสำคัญเท่านั้นที่เปลี่ยนแปลง อย่างไรก็ตาม การรวมแต่ละรายการทำงานแตกต่างกัน ดังนั้นจึงสามารถแสดงผลลัพธ์ที่แตกต่างกันได้ขึ้นอยู่กับข้อมูล ด้วยเหตุนี้ จึงจำเป็นอย่างยิ่งที่คุณจะต้องเข้าใจอย่างถ่องแท้ว่าการเข้าร่วมแต่ละครั้งทำอะไร และเลือกอันที่จะคืนสิ่งที่คุณต้องการอย่างแน่นอน!

เอาท์พุต

ตอนนี้เรามาดูผลลัพธ์กันดีกว่า

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม

3. ตัวอย่างการเข้าร่วมที่ถูกต้อง

RIGHT JOIN คือภาพสะท้อนของ LEFT JOIN นั่นเป็นเหตุผลที่ฉันสามารถแก้ไขปัญหาก่อนหน้านี้ได้อย่างง่ายดายโดยใช้ RIGHT JOIN ฉันขอแสดงวิธีการทำ

ข้อมูล

โต๊ะยังคงเหมือนเดิม ฉันจะใช้การเข้าร่วมประเภทอื่น

รหัส

SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM orders o
RIGHT JOIN customers c ON o.cust_id = c.id GROUP BY c.city
HAVING COUNT(o.id) >=5;

 

นี่คือสิ่งที่เปลี่ยนแปลงไป ขณะที่ฉันใช้ RIGHT JOIN ฉันจึงเปลี่ยนลำดับของตาราง ตอนนี้โต๊ะ คำสั่งซื้อ กลายเป็นคนซ้ายและโต๊ะ ลูกค้า คนที่ใช่. เงื่อนไขการเข้าร่วมยังคงเหมือนเดิม ฉันเพิ่งเปลี่ยนลำดับของคอลัมน์เพื่อแสดงลำดับของตาราง แต่ก็ไม่จำเป็นต้องทำ

ด้วยการสลับลำดับของตารางและใช้ RIGHT JOIN ฉันจะส่งออกลูกค้าทั้งหมดอีกครั้ง แม้ว่าพวกเขาจะไม่ได้ส่งคำสั่งซื้อใดๆ ก็ตาม

แบบสอบถามที่เหลือจะเหมือนกับในตัวอย่างก่อนหน้า เช่นเดียวกับผลลัพธ์

หมายเหตุ: ในทางปฏิบัติ ขวาเข้าร่วม ค่อนข้างไม่ค่อยได้ใช้ LEFT JOIN ดูเป็นธรรมชาติมากกว่าสำหรับผู้ใช้ SQL ดังนั้นพวกเขาจึงใช้บ่อยกว่ามาก อะไรก็ตามที่สามารถทำได้ด้วย RIGHT JOIN ก็สามารถทำได้ด้วย LEFT JOIN เช่นกัน ด้วยเหตุนี้ จึงไม่มีสถานการณ์เฉพาะที่อาจต้องการ RIGHT JOIN

เอาท์พุต

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม

4. ตัวอย่างการเข้าร่วมแบบเต็ม

คำถามโดย Salesforce และ Tesla ต้องการให้คุณนับผลต่างสุทธิระหว่างจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปี 2020 กับจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปีที่แล้ว

สินค้าใหม่

“คุณจะได้รับตารางการเปิดตัวผลิตภัณฑ์แยกตามบริษัทในแต่ละปี เขียนแบบสอบถามเพื่อนับผลต่างสุทธิระหว่างจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปี 2020 กับจำนวนบริษัทผลิตภัณฑ์ที่เปิดตัวในปีที่แล้ว แสดงชื่อบริษัทและผลต่างสุทธิของผลิตภัณฑ์สุทธิที่ออกในปี 2020 เมื่อเทียบกับปีที่แล้ว”

ข้อมูล

คำถามให้หนึ่งตารางที่มีคอลัมน์ต่อไปนี้

รถ_เปิดตัว

ปี: int
ชื่อ บริษัท: วาร์ชาร์
ชื่อผลิตภัณฑ์: วาร์ชาร์

ฉันจะเข้าร่วมโต๊ะได้ยังไงในเมื่อมีเพียงโต๊ะเดียว? อืม มาดูกันด้วย!

รหัส

คำถามนี้ซับซ้อนกว่าเล็กน้อย ดังนั้นฉันจะค่อยๆ เปิดเผย

SELECT company_name, product_name AS brand_2020
FROM car_launches
WHERE YEAR = 2020;

 

คำสั่ง SELECT แรกจะค้นหาบริษัทและชื่อผลิตภัณฑ์ในปี 2020 คำค้นหานี้จะถูกเปลี่ยนเป็นแบบสอบถามย่อยในภายหลัง

คำถามต้องการให้คุณค้นหาความแตกต่างระหว่างปี 2020 และ 2019 เรามาเขียนคำถามเดียวกันแต่สำหรับปี 2019 กันดีกว่า

SELECT company_name, product_name AS brand_2019
FROM car_launches
WHERE YEAR = 2019;

 

ตอนนี้ฉันจะสร้างแบบสอบถามเหล่านี้เป็นแบบสอบถามย่อยและเข้าร่วมโดยใช้ FULL OUTER JOIN

SELECT *
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name;

 

แบบสอบถามย่อยสามารถถือเป็นตารางและสามารถรวมเข้าด้วยกันได้ ฉันตั้งชื่อแทนให้กับแบบสอบถามย่อยแรก และวางไว้ในส่วนคำสั่ง FROM จากนั้นฉันใช้ FULL OUTER JOIN เพื่อรวมเข้ากับแบบสอบถามย่อยที่สองในคอลัมน์ชื่อบริษัท

เมื่อใช้การรวม SQL ประเภทนี้ ฉันจะทำให้บริษัทและผลิตภัณฑ์ทั้งหมดในปี 2020 รวมเข้ากับบริษัทและผลิตภัณฑ์ทั้งหมดในปี 2019

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม
 

ตอนนี้ฉันสามารถสรุปคำถามของฉันได้แล้ว มาเลือกชื่อบริษัทกัน นอกจากนี้ ฉันจะใช้ฟังก์ชัน COUNT() เพื่อค้นหาจำนวนผลิตภัณฑ์ที่เปิดตัวในแต่ละปี แล้วลบออกเพื่อให้ได้ความแตกต่าง สุดท้ายนี้ ฉันจะจัดกลุ่มผลลัพธ์ตามบริษัทและจัดเรียงตามบริษัทตามตัวอักษรด้วย

นี่คือคำถามทั้งหมด

SELECT a.company_name, (COUNT(DISTINCT a.brand_2020)-COUNT(DISTINCT b.brand_2019)) AS net_products
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name
GROUP BY a.company_name
ORDER BY company_name;

เอาท์พุต

นี่คือรายชื่อบริษัทและผลิตภัณฑ์ที่เปิดตัวที่แตกต่างกันระหว่างปี 2020 และ 2019

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม

5. ตัวอย่าง CROSS JOIN

คำถามนี้โดย Deloitte เหมาะอย่างยิ่งสำหรับการแสดงให้เห็นว่า CROSS JOIN ทำงานอย่างไร

สูงสุดสองตัวเลข

“เมื่อพิจารณาจากตัวเลขคอลัมน์เดียว ให้พิจารณาการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของตัวเลขสองตัว โดยสมมติว่าคู่ของตัวเลข (x,y) และ (y,x) เป็นการเรียงสับเปลี่ยนที่แตกต่างกันสองค่า จากนั้นในการเรียงสับเปลี่ยนแต่ละครั้ง ให้หาค่าสูงสุดของตัวเลขทั้งสองตัว

เอาต์พุตสามคอลัมน์: ตัวเลขแรก ตัวเลขที่สอง และค่าสูงสุดของทั้งสอง”

คำถามต้องการให้คุณค้นหาการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของตัวเลขสองตัว โดยสมมติว่าคู่ของตัวเลข (x,y) และ (y,x) เป็นการเรียงสับเปลี่ยนที่แตกต่างกันสองจำนวน จากนั้นเราจำเป็นต้องค้นหาจำนวนสูงสุดสำหรับการเรียงสับเปลี่ยนแต่ละครั้ง

ข้อมูล

คำถามให้ตารางหนึ่งตารางกับหนึ่งคอลัมน์

deloitte_numbers

จำนวน: int

รหัส

รหัสนี้เป็นตัวอย่างของ CROSS JOIN แต่ยังเป็นการเข้าร่วมด้วยตนเองด้วย

SELECT dn1.number AS number1, dn2.number AS number2, CASE WHEN dn1.number > dn2.number THEN dn1.number ELSE dn2.number END AS max_number
FROM deloitte_numbers AS dn1
CROSS JOIN deloitte_numbers AS dn2;

 

ฉันอ้างอิงตารางใน FROM และตั้งชื่อหนึ่งนามแฝงให้กับมัน จากนั้นฉันก็ CROSS JOIN ด้วยตัวมันเองโดยอ้างอิงหลังจาก CROSS JOIN และให้นามแฝงอื่นแก่ตาราง

ตอนนี้คุณสามารถใช้ตารางเดียวเนื่องจากเป็นสองตารางได้ ฉันเลือกหมายเลขคอลัมน์จากแต่ละตาราง จากนั้นฉันใช้คำสั่ง CASE เพื่อกำหนดเงื่อนไขที่จะแสดงจำนวนสูงสุดของตัวเลขทั้งสอง

เหตุใด CROSS JOIN จึงใช้ที่นี่ โปรดจำไว้ว่า เป็นการรวม SQL ประเภทหนึ่งที่จะแสดงชุดค่าผสมทั้งหมดของแถวทั้งหมดจากตารางทั้งหมด นั่นคือสิ่งที่คำถามถาม!

เอาท์พุต

นี่คือภาพรวมของชุดค่าผสมทั้งหมดและจำนวนที่สูงกว่าของทั้งสองชุด

 

SQL สำหรับวิทยาศาสตร์ข้อมูล: การทำความเข้าใจและการใช้ประโยชน์จากการรวม

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

SQL Joins มีบทบาทสำคัญในงานวิทยาศาสตร์ข้อมูล เช่น การสำรวจข้อมูล การล้างข้อมูล และวิศวกรรมฟีเจอร์

ต่อไปนี้คือตัวอย่างเล็กๆ น้อยๆ ของวิธีการใช้ประโยชน์จากการรวม SQL:

  1. การรวมข้อมูล: การรวมตารางทำให้คุณสามารถรวบรวมแหล่งข้อมูลต่างๆ เข้าด้วยกัน ทำให้คุณสามารถวิเคราะห์ความสัมพันธ์และความสัมพันธ์ระหว่างชุดข้อมูลหลายชุดได้ ตัวอย่างเช่น การรวมตารางลูกค้าเข้ากับตารางธุรกรรมสามารถให้ข้อมูลเชิงลึกเกี่ยวกับพฤติกรรมของลูกค้าและรูปแบบการซื้อได้
  1. การตรวจสอบข้อมูล: การรวมสามารถใช้เพื่อตรวจสอบคุณภาพและความสมบูรณ์ของข้อมูล ด้วยการเปรียบเทียบข้อมูลจากตารางต่างๆ คุณสามารถระบุความไม่สอดคล้องกัน ค่าที่หายไป หรือค่าผิดปกติได้ สิ่งนี้ช่วยคุณในการล้างข้อมูลและรับรองว่าข้อมูลที่ใช้สำหรับการวิเคราะห์นั้นถูกต้องและเชื่อถือได้
  1. วิศวกรรมคุณลักษณะ: การรวมสามารถเป็นเครื่องมือในการสร้างคุณสมบัติใหม่สำหรับโมเดลการเรียนรู้ของเครื่อง ด้วยการรวมตารางที่เกี่ยวข้อง คุณสามารถแยกข้อมูลที่มีความหมายและสร้างคุณลักษณะที่รวบรวมความสัมพันธ์ที่สำคัญภายในข้อมูลได้ ซึ่งสามารถเพิ่มพลังการทำนายให้กับโมเดลของคุณได้
  1. การรวมกลุ่มและการวิเคราะห์: การรวมทำให้คุณสามารถดำเนินการรวมและวิเคราะห์ที่ซับซ้อนในหลายตารางได้ ด้วยการรวมข้อมูลจากแหล่งต่างๆ คุณจะได้รับมุมมองข้อมูลที่ครอบคลุมและรับข้อมูลเชิงลึกอันมีค่า ตัวอย่างเช่น การเข้าร่วมตารางการขายกับตารางผลิตภัณฑ์สามารถช่วยคุณวิเคราะห์ประสิทธิภาพการขายตามประเภทผลิตภัณฑ์หรือภูมิภาคได้

ดังที่ฉันได้กล่าวไปแล้ว ความซับซ้อนของการรวมไม่แสดงในรูปแบบไวยากรณ์ คุณเห็นว่าไวยากรณ์นั้นค่อนข้างตรงไปตรงมา

แนวทางปฏิบัติที่ดีที่สุดสำหรับการเข้าร่วมยังสะท้อนให้เห็นเช่นกัน เนื่องจากไม่ได้เกี่ยวข้องกับการเขียนโค้ด แต่สนใจว่าการรวมทำอะไรและทำงานอย่างไร

เมื่อต้องการใช้ประโยชน์สูงสุดจากการรวมใน SQL ให้พิจารณาแนวทางปฏิบัติที่ดีที่สุดต่อไปนี้

  1. ทำความเข้าใจข้อมูลของคุณ: ทำความคุ้นเคยกับโครงสร้างและความสัมพันธ์ภายในข้อมูลของคุณ ซึ่งจะช่วยให้คุณเลือกประเภทการรวมที่เหมาะสมและเลือกคอลัมน์ที่เหมาะสมสำหรับการจับคู่
  1. ใช้ดัชนี: หากตารางของคุณมีขนาดใหญ่หรือเชื่อมต่อกันบ่อยครั้ง ให้พิจารณาเพิ่มดัชนีในคอลัมน์ที่ใช้ในการรวม ดัชนีสามารถปรับปรุงประสิทธิภาพการค้นหาได้อย่างมาก
  1. คำนึงถึงประสิทธิภาพ: การเข้าร่วมตารางขนาดใหญ่หรือหลายตารางอาจมีค่าใช้จ่ายสูงในการคำนวณ เพิ่มประสิทธิภาพการสืบค้นของคุณโดยการกรองข้อมูล การใช้ประเภทการรวมที่เหมาะสม และพิจารณาการใช้ตารางชั่วคราวหรือแบบสอบถามย่อย
  1. ทดสอบและตรวจสอบ: ตรวจสอบผลลัพธ์การเข้าร่วมของคุณเสมอเพื่อให้แน่ใจว่าถูกต้อง ดำเนินการตรวจสอบความถูกต้องและตรวจสอบว่าข้อมูลที่เข้าร่วมนั้นสอดคล้องกับความคาดหวังและตรรกะทางธุรกิจของคุณ

SQL Joins เป็นแนวคิดพื้นฐานที่ช่วยให้คุณในฐานะนักวิทยาศาสตร์ข้อมูลสามารถผสานและวิเคราะห์ข้อมูลจากหลายแหล่งได้ ด้วยการทำความเข้าใจ SQL join ประเภทต่างๆ เชี่ยวชาญไวยากรณ์ และใช้ประโยชน์จากมันอย่างมีประสิทธิภาพ นักวิทยาศาสตร์ด้านข้อมูลสามารถปลดล็อกข้อมูลเชิงลึกอันมีค่า ตรวจสอบคุณภาพข้อมูล และขับเคลื่อนการตัดสินใจที่ขับเคลื่อนด้วยข้อมูล

ฉันแสดงให้คุณเห็นวิธีการทำในห้าตัวอย่าง ตอนนี้ก็ขึ้นอยู่กับคุณแล้วที่จะควบคุมพลังของ SQL และเข้าร่วมโครงการวิทยาศาสตร์ข้อมูลของคุณและบรรลุผลลัพธ์ที่ดีขึ้น
 
 
เนท โรซิดิ เป็นนักวิทยาศาสตร์ข้อมูลและในกลยุทธ์ผลิตภัณฑ์ เขายังเป็นผู้ช่วยศาสตราจารย์สอนการวิเคราะห์และเป็นผู้ก่อตั้ง StrataScratchซึ่งเป็นแพลตฟอร์มที่ช่วยให้นักวิทยาศาสตร์ด้านข้อมูลเตรียมพร้อมสำหรับการสัมภาษณ์ด้วยคำถามสัมภาษณ์จริงจากบริษัทชั้นนำ เชื่อมต่อกับเขาที่ ทวิตเตอร์: StrataScratch or LinkedIn.
 

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต