Câu hỏi phỏng vấn SQL


19

Đưa ra một bảng 'nhân viên'

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

Chỉ sử dụng SQL mới tìm thấy tất cả các biến thể của chuyển nhân viên từ bộ phận này sang bộ phận khác, do đó mức lương trung bình ở cả hai bộ phận 'khởi hành' và 'đến' đều tăng.

Tái bút: Tôi đã được hỏi câu hỏi trong một cuộc phỏng vấn, không bao giờ đưa ra câu trả lời và Google rất ít giúp đỡ.


5
Tôi hy vọng câu trả lời mà họ mong đợi là "Tại sao tên bảng và cột chữ thường và tại sao lại nhấn mạnh hơn là vỏ lạc đà"
Chuột Mikey

@MikeyMouse: tại sao không? Trường hợp lạc đà là cách ưa thích để viết tên bảng bằng SQL (ít nhất là nơi tôi đến)
a_horse_with_no_name

Câu trả lời:


22

Vì vậy, bạn đang tìm kiếm Nhân viên có thu nhập dưới mức trung bình trong bộ phận hiện tại của họ nhưng trên mức trung bình trong bộ phận mới tiềm năng của họ.

Một cách có thể để có được tất cả các chuyển nhân viên sẽ đáp ứng điều này sẽ là

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 

Làm thế nào để bạn biết bộ phận nào là "mới" và bộ phận nào là "cũ"?
mustaccio

1
@mustaccio - Bộ phận họ hiện đang ở trong bảng employees. Điều này tìm thấy tất cả các bộ phận mà họ có thể chuyển đến (nếu có) đáp ứng điều kiện.
Martin Smith

10

Cho rằng đây là một câu hỏi phỏng vấn (và không phải là một câu hỏi kiểm tra ), có một vài khả năng tùy thuộc vào ngữ cảnh.

Câu hỏi không đầy đủ như đã nêu và không thểcó lẽ không nên trả lời ở dạng hiện tại của nó ( vui lòng xem phần CẬP NHẬT bên dưới ). Điều gì còn thiếu? Vâng, ví dụ:

  • Là câu hỏi hỏi về chuyển nhượng trong quá khứ hoặc chuyển giao tiềm năng trong tương lai? Có sự mơ hồ trong từ ngữ.
  • Có các lĩnh vực khác trong bảng này hay đây là tất cả chúng? Nếu vậy, chúng là gì?
  • Có bất kỳ ràng buộc hoặc chỉ mục được xác định trên bảng này? Phần còn lại của lược đồ ở đâu?
  • Đây là hệ thống OLTP hay OLAP?

Nếu đây là nhiều hơn một bảng OLTP, thì sẽ có một ràng buộc PK / Chỉ mục duy nhất / Ràng buộc duy nhất được xác định trên employee_idtrường. Và trong trường hợp đó, sẽ chỉ có một mục nhập cho mỗi employee_idvà do đó không có cách nào để xác định chuyển khoản (tức là không có department_idhồ sơ "cũ" ).

Nếu đây là nhiều hơn một bảng OLAP, thì đây có thể là Thứ nguyên thay đổi chậm, trong trường hợp đó sẽ có nhiều employee_idbản ghi. Nhưng, có cũng sẽ cần phải được ValidFromValidTolĩnh vực NGÀY / DATETIME để khởi hànhđến các bộ phận có thể được xác định theo thứ tự thích hợp của họ. Không có những lĩnh vực này, không có cách nào để xác định bộ phận nào là khởi hành và bộ phận nào là nơi đến . Và không biết rằng sự khác biệt sẽ cho phép lấy lại hồ sơ ngược lại với yêu cầu.

Vì vậy, "bối cảnh" cho cách giải thích câu hỏi này là lý do tại sao câu hỏi được nêu ra như vậy.

  • Bạn đã quên một số chi tiết giữa cuộc phỏng vấn và hỏi nó ở đây:

    Nó xảy ra, nhưng nếu đây là trường hợp, thì bạn cần cập nhật câu hỏi để điền thông tin còn thiếu, hoặc nó sẽ vẫn không thể trả lời được (ít nhất là về mặt nhận được câu trả lời có ý nghĩa).

  • Câu hỏi đã được phiên âm chính xác ở đây và những vấn đề này không được biết hoặc dự định bởi (những) người phỏng vấn:

    Trong trường hợp này, nếu bạn nhận thức được những vấn đề này và họ đang mong đợi một câu trả lời, thì bạn có thể sử dụng nó như một phương tiện để loại bỏ chúng như một chủ nhân có thể ;-).

  • Câu hỏi đã được phiên âm chính xác ở đây, và những vấn đề này đã được biết hoặc dự định bởi (những) người phỏng vấn:

    Trong trường hợp này, có lẽ họ đã sử dụng điều này như một phương tiện để loại bỏ mọi người bằng cách xem xét nhiều hơn khả năng kỹ thuật thô. Điều rất quan trọng là đặt câu hỏi rất rõ ràng về dự án bạn đang thực hiện vì hầu hết người dùng cuối và chủ sở hữu sản phẩm, v.v. đừng suy nghĩ / nói chi tiết kỹ thuật cấp thấp và thường sẽ bỏ qua những phần cần thiết. Điều quan trọng là không giả định mà thay vào đó hãy quay lại nguồn yêu cầu để được làm rõ để bạn không lãng phí thời gian làm việc sai hướng.

    Hãy nhớ rằng bạn không phỏng vấn cho một vị trí chỉ đơn giản là trả lời các câu hỏi kỹ thuật trong chân không. Bạn đang phỏng vấn cho một vị trí để làm việc trong các dự án và sẽ luôn có sự mơ hồ và / hoặc thông tin sai lệch trong những gì một người được yêu cầu làm. Một người phỏng vấn giỏi sẽ cố gắng hiểu cả về trình độ kỹ năng của bạn nếu bạn thực sự sẽ làm việc hiệu quả. Tôi đã hỏi những câu hỏi như thế này khi phỏng vấn mọi người để loại bỏ những người trả lời tốt các câu hỏi kỹ thuật nhưng sẽ cần quá nhiều nắm tay và cuối cùng sẽ làm chậm đội.


CẬP NHẬT:

Chỉ để làm rõ sự làm rõ cho những người cảm thấy rằng đây là một câu hỏi về kỹ năng truy vấn đơn giản, được giải thích là @Martin đã thực hiện trong câu trả lời của mình: chúng tôi thậm chí không biết liệu đây có phải là từ ngữ chính xác của câu hỏi được trình bày cho OP But chúng tôi biết, nhiều như chúng tôi có thể tin tưởng vào tình huống, rằng điều này đã được đưa ra trong một cuộc phỏng vấn. Và tốtngười phỏng vấn đặt câu hỏi rằng không chỉ rút ra một kỹ năng kỹ thuật cho ứng viên, mà cả kỹ năng phi kỹ thuật / "mềm" của họ. Rất có thể Martin đã chính xác trong cách giải thích của mình rằng câu hỏi đang hỏi về các kết hợp chuyển giao tiềm năng trong tương lai (nghĩa là "đôi khi một điếu xì gà chỉ là một điếu xì gà"). Và nếu đây là một câu hỏi kiểm tra, thì tôi sẽ ngạc nhiên nếu câu trả lời của anh ta không đúng. Nhưng, đây không phải là một câu hỏi kiểm tra. Chắc chắn, đó có thể là một câu hỏi phỏng vấn được hỏi bởi một người không cố gắng xem loại ứng viên là ai và họ sẽ thực hiện như thế nào trong một cuộc họp thiết kế nơi những sự mơ hồ như vậy xuất hiện thường xuyên hơn hầu hết mọi người thậm chí nhận thấy. Nhưng không có câu trả lời nào được đưa ra,hoàn thành công việc (tìm kiếm trên trang "Bạn đang tìm người", nhưng bạn thực sự nên đọc toàn bộ). Vì vậy, giữa hai ứng viên bằng nhau về mọi mặt, nhưng một người giả định cách giải thích và đúng, trong khi người còn lại đặt câu hỏi và sau đó có câu trả lời đúng, tôi chắc chắn sẽ đi với người hỏi trước.


6
"Tất cả các biến thể" dường như rõ ràng với tôi rằng họ đang nói về chuyển nhượng giả định không phải là chuyển giao lịch sử. Và sau đó câu hỏi là hoàn toàn có thể trả lời với các thông tin nhất định.
Martin Smith

7
Tôi với Martin. Câu hỏi rõ ràng với tôi và đủ thông tin trả lời câu hỏi.
paparazzo

3
@MartinSmith Tôi không nói rằng giải thích của bạn không hợp lệ, hoặc đó không phải là giải thích nhất. Tôi đang nói rằng đó không phải là người duy nhất . Đôi khi, từ ngữ của một cái gì đó "có vẻ" rõ ràng, nhưng vẫn không chính xác ;-) Như tôi đã nói lúc đầu, câu trả lời của tôi là một câu hỏi phỏng vấn, không phải là một câu hỏi kiểm tra. Và tôi thường được yêu cầu làm những việc được "nêu rõ", nhưng hoàn toàn không phải là điều người đó thực sự muốn, nhưng họ không biết rằng họ đã yêu cầu điều sai vì họ cho rằng mọi người đều đồng ý về thuật ngữ.
Solomon Rutzky

2
@ edc65 Cảm ơn bạn. Cho rằng mối quan tâm của tôi là về sự mơ hồ, tôi đánh giá cao sự mơ hồ trong lời nhận xét của bạn :).
Solomon Rutzky

2
@srutzky Tôi đoán tôi là người duy nhất ở đây với bạn :) Cảm ơn bạn đã thêm câu trả lời của bạn vào hỗn hợp mặc dù. Là một người đã thực hiện hàng trăm cuộc phỏng vấn, đây là loại phản hồi chu đáo mà tôi đang tìm kiếm. Tôi có thể sẽ không hỏi câu hỏi này, nhưng nếu tôi làm vậy, một ứng cử viên lý tưởng có thể sẽ trả lời tương tự và sau đó, sau khi làm rõ, sẽ viết một truy vấn như của Martin. Điểm chính trong việc đọc những bình luận này là mọi người nhìn mọi thứ theo những cách khác nhau và đưa ra những giả định khác nhau. Vì vậy, luôn luôn làm rõ và xác nhận các giả định của bạn, đặc biệt là trong một tình huống phỏng vấn!
Geoff Patterson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.