คำถามสัมภาษณ์ SQL


19

รับตาราง 'พนักงาน'

 employee_id | salary | department_id 
-------------+--------+---------------

การใช้ SQL ค้นหาตัวแปรทั้งหมดของการถ่ายโอนพนักงานจากแผนกหนึ่งไปอีกแผนกหนึ่งเท่านั้นดังนั้นเงินเดือนโดยเฉลี่ยในแผนก 'ออกเดินทาง' และ 'มาถึง' จึงเพิ่มขึ้น

ป.ล. ฉันถูกถามคำถามเกี่ยวกับการสัมภาษณ์ซึ่งไม่เคยให้คำตอบและ Google มีความช่วยเหลือเล็กน้อย


5
ฉันหวังว่าคำตอบที่พวกเขาคาดหวังคือ "ทำไมตารางตัวพิมพ์เล็กและชื่อคอลัมน์และทำไมการเน้นมากกว่าการใส่ตัวอูฐ"
Mikey Mouse

@ MikeyMouse: ทำไมไม่ กรณี Camel เป็นวิธีที่ต้องการเขียนชื่อตารางใน SQL (อย่างน้อยที่ฉันมาจาก)
a_horse_with_no_name

คำตอบ:


22

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

วิธีหนึ่งที่เป็นไปได้ในการรับโอนพนักงานทั้งหมดที่จะเป็นไปตามนี้คือ

WITH departments
     AS (SELECT AVG(salary) AS AvgSalary,
                department_id
         FROM   employees
         GROUP  BY department_id)
SELECT e.employee_id,
       dept_current.department_id AS current_department_id,
       dept_new.department_id     AS new_department_id
FROM   employees e
       JOIN departments dept_current
         ON e.department_id = dept_current.department_id
            AND dept_current.AvgSalary > e.salary
       JOIN departments dept_new
         ON dept_new.AvgSalary < e.salary 

คุณจะรู้ได้อย่างไรว่าแผนกไหน "ใหม่" และแผนกไหน "เก่า"
mustaccio

1
@mustaccio - แผนกที่อยู่ในตารางemployeesนี้ พบว่าทุกแผนกที่พวกเขาสามารถถ่ายโอนไปยัง (ถ้ามี) ที่ตรงตามเงื่อนไข
Martin Smith

10

ระบุว่านี่เป็นคำถามสัมภาษณ์ (ไม่ใช่คำถามทดสอบ ) มีความเป็นไปได้น้อยขึ้นอยู่กับบริบท

คำถามไม่สมบูรณ์ตามที่ระบุไว้และ ไม่ได้อาจจะไม่ได้รับคำตอบในรูปแบบปัจจุบัน ( โปรดดูส่วน UPDATE ด้านล่าง ) อะไรหายไป? ตัวอย่างเช่น:

  • คำถามถามเกี่ยวกับการถ่ายโอนที่ผ่านมาหรือการถ่ายโอนที่อาจเกิดขึ้นในอนาคตหรือไม่ มีความคลุมเครือในถ้อยคำ
  • มีเขตข้อมูลอื่นในตารางนี้หรือนี่เป็นเขตข้อมูลทั้งหมดหรือไม่ ถ้าเป็นเช่นนั้นพวกเขาคืออะไร?
  • มีข้อ จำกัด หรือดัชนีใด ๆ ที่กำหนดไว้ในตารางนี้หรือไม่? สคีเหลือที่เหลืออยู่ที่ไหน
  • นี่เป็นระบบ OLTP หรือ OLAP หรือไม่?

หากนี่เป็นตาราง OLTP มากกว่านั้นควรมีข้อ จำกัด ของดัชนี PK / ไม่ซ้ำกัน / ไม่ซ้ำกันที่กำหนดไว้ในemployee_idเขตข้อมูล และในกรณีนั้นจะมีเพียงหนึ่งรายการต่อหนึ่งemployee_idดังนั้นจึงไม่มีวิธีในการพิจารณาการถ่ายโอน (เช่นไม่มีdepartment_idบันทึก"เก่า" )

หากนี่เป็นตาราง OLAP มากกว่านี้อาจเป็นมิติที่เปลี่ยนแปลงช้าซึ่งในกรณีนี้จะมีหลายemployee_idระเบียน แต่ก็จะต้องมีValidFromและValidToเขตข้อมูล DATE / DATETIME เพื่อให้แผนกออกเดินทางและการมาถึงสามารถกำหนดในลำดับที่เหมาะสมของพวกเขา โดยไม่ต้องเขตข้อมูลเหล่านี้มีวิธีการตรวจสอบว่าเป็นฝ่ายออกเดินทางและเป็นที่หนึ่งที่เดินทางมาถึง และไม่ทราบว่าความแตกต่างนั้นจะช่วยให้ได้รับการบันทึกกลับที่ตรงข้ามกับคำขอ

ดังนั้น "บริบท" สำหรับการตีความคำถามนี้เป็นเหตุผลว่าทำไมคำถามดังกล่าวจึงเป็นเช่นนั้น

  • คุณลืมรายละเอียดบางอย่างระหว่างการสัมภาษณ์และถามที่นี่:

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

  • คำถามได้ถูกคัดลอกอย่างถูกต้องที่นี่และปัญหาเหล่านี้ไม่เป็นที่รู้จักหรือตั้งใจโดยผู้สัมภาษณ์:

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

  • คำถามได้ถูกคัดลอกอย่างถูกต้องที่นี่และปัญหาเหล่านี้เป็นที่รู้กันหรือมีจุดประสงค์โดยผู้สัมภาษณ์:

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

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


UPDATE:

เพียงชี้แจงความกระจ่างสำหรับผู้ที่รู้สึกว่านี่เป็นคำถามทักษะการสืบค้นอย่างง่ายตีความว่า @Martin ได้ทำในคำตอบของเขา: เราไม่รู้ด้วยซ้ำว่านี่เป็นถ้อยคำที่แน่นอนของคำถามที่นำเสนอต่อ OP แต่ เรารู้ได้มากเท่าที่เราสามารถเชื่อถือสถานการณ์ที่ได้รับในการสัมภาษณ์ และดีผู้สัมภาษณ์ถามคำถามที่ไม่เพียง แต่ดึงทักษะทางเทคนิคของผู้สมัคร แต่ยังรวมถึงทักษะที่ไม่ใช่ด้านเทคนิค / "อ่อน" ของพวกเขา มันอาจเป็นไปได้ว่ามาร์ตินนั้นถูกต้องในการตีความของเขาว่าคำถามนั้นถามเกี่ยวกับการผสมผสานการถ่ายโอนที่อาจเกิดขึ้นในอนาคต (เช่น "บางครั้งซิการ์ก็เป็นแค่ซิการ์") และถ้านี่เป็นคำถามทดสอบฉันจะแปลกใจถ้าคำตอบของเขาไม่ถูกต้อง แต่นี่ไม่ใช่คำถามทดสอบ แน่นอนว่าอาจเป็นคำถามสัมภาษณ์ที่ถามโดยคนที่ไม่ได้พยายามที่จะดูว่าบุคคลประเภทใดที่ผู้สมัครเป็นและวิธีที่พวกเขาจะดำเนินการในการประชุมการออกแบบที่ความคลุมเครือดังกล่าวเกิดขึ้นบ่อยกว่าคนส่วนใหญ่สังเกตเห็น แต่ไม่ได้รับคำตอบทำสิ่งต่าง ๆ เสร็จแล้ว (ค้นหาบนหน้าเว็บสำหรับ "คุณกำลังมองหาคนที่" แต่คุณควรอ่านทุกอย่างจริงๆ) ดังนั้นระหว่างผู้สมัครสองคนที่เท่าเทียมกันในทุกด้าน แต่มีผู้สันนิษฐานว่าเป็นคนตีความและถูกต้องในขณะที่คนอื่นถามคำถามแล้วได้คำตอบที่ถูกต้องฉันจะไปกับคนที่ถามก่อน


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

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

3
@MartinSmith ฉันไม่ได้บอกว่าการตีความของคุณไม่ถูกต้องหรือว่าไม่ใช่สิ่งที่น่าจะเป็นไปได้มากที่สุด ฉันกำลังบอกว่ามันไม่ได้เป็นเพียงหนึ่ง บ่อยครั้งที่ถ้อยคำของบางสิ่ง "ดูเหมือน" ชัดเจน แต่ก็ยังไม่ถูกต้อง ;-) อย่างที่ฉันพูดตอนแรกคำตอบของฉันคือสิ่งนี้เพราะเป็นคำถามสัมภาษณ์ไม่ใช่คำถามทดสอบ และบ่อยครั้งที่ฉันถูกขอให้ทำสิ่งที่ระบุไว้อย่างชัดเจน แต่ก็ไม่ใช่สิ่งที่คนต้องการจริงๆ แต่พวกเขาไม่ทราบว่าพวกเขากำลังขอสิ่งผิดเพราะพวกเขาคิดว่าทุกคนเห็นด้วยกับคำศัพท์
โซโลมอน Rutzky

2
@ edc65 ขอบคุณ เนื่องจากความกังวลของฉันเกี่ยวกับความกำกวมฉันขอขอบคุณความกำกวมของความคิดเห็นของคุณ :)
โซโลมอน Rutzky

2
@srutzky ฉันเดาว่าฉันเป็นคนเดียวที่อยู่กับคุณที่นี่ :) ขอบคุณที่เพิ่มคำตอบลงในรายการเพลง ในฐานะที่เป็นคนที่ทำการสัมภาษณ์หลายร้อยครั้งนี่เป็นคำตอบที่ฉันต้องการหา ฉันอาจจะไม่ถามคำถามนี้ แต่ถ้าฉันทำผู้สมัครในอุดมคติจะตอบคำถามในทำนองเดียวกันหลังจากนั้นหลังจากการชี้แจง ประเด็นหลักในการอ่านความคิดเห็นเหล่านี้คือผู้คนมองเห็นสิ่งต่าง ๆ และตั้งสมมติฐานที่แตกต่างกัน อธิบายให้ชัดเจนและยืนยันสมมติฐานของคุณโดยเฉพาะในสถานการณ์สัมภาษณ์!
Geoff Patterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.