2009-11-23 43 views
19

Chúng tôi đang tìm cách thuê một lập trình viên SQL và cần một câu hỏi sàng lọc tốt tương tự như FizzBuzz question nhưng đối với SQL.Câu hỏi 'FizzBuzz' tốt cho một lập trình viên SQL là gì?

Mặc dù chắc chắn có thể viết một giải pháp FizzBuzz bằng SQL, nhưng tôi nghĩ nỗ lực đó là không đúng chỗ. Câu hỏi FizzBuzz đánh giá các nguyên tắc cơ bản về mã hóa như vòng lặp, điều kiện, đầu ra và toán cơ bản. Với SQL, tôi nghĩ rằng một cái gì đó liên quan đến truy vấn, tham gia, dự đoán, và tương tự sẽ thích hợp hơn. Nhưng, cũng giống như với FizzBuzz, đơn giản là các lập trình viên SQL 'tốt' có thể viết một giải pháp trên giấy trong vài phút.

Câu hỏi 'FizzBuzz' tốt cho một lập trình viên SQL là gì?

+0

Bạn đang tìm cách hỏi về chỉ xây dựng truy vấn SQL hoặc thiết kế DB tốt, ví dụ: Biểu đồ E-R, điều hướng, v.v. –

+0

Yêu cầu họ viết truy vấn pivot. Nếu họ có thể làm điều đó trên một tấm bảng cho họ thuê. – Will

+0

@Mike - Câu hỏi hay. Suy nghĩ của tôi là truy vấn liên quan vì đó là khá cơ bản và đây là một câu hỏi sàng lọc. Chắc chắn các khu vực khác sẽ được đề cập đến ở những nơi khác trong quá trình phỏng vấn. –

Trả lời

11

Chúng tôi thường sử dụng một cái gì đó như thế này như một tối thiểu cho SQL:

Với bảng:

Khách hàng: CustomerID, CustomerName

Orders: OrderID, CustomerID, ProductName, UnitPrice, Số lượng

Tính tổng giá trị đơn đặt hàng cho từng khách hàng hiển thị CustomerName và TotalPrice.

Theo chúng tôi, đây là một câu hỏi khá đơn giản yêu cầu tham gia trên hai bảng, nhóm và chức năng tổng hợp.Chúng tôi ngạc nhiên về việc có bao nhiêu người chúng ta nói đến việc viết mã cơ sở dữ liệu trong công việc của họ không thể nhớ cú pháp tham gia (và chúng tôi không bao giờ quan tâm họ sử dụng cú pháp nào, kiểu MSSQL hay phong cách Oracle hay cái gì khác).

Những gì tôi thích về câu hỏi này là nó vay chính nó để theo dõi những câu hỏi như

Làm thế nào bạn sẽ tìm thấy tất cả các khách hàng đặt mua nhiều hơn tổng số hơn $ 1000? Bạn chuẩn hóa các bảng này như thế nào? Bạn sẽ tối ưu hóa các truy vấn như thế nào?

+0

Cho dù một dev có thể "nhớ cú pháp tham gia" hoặc phải tìm kiếm nó trên Google (thậm chí để làm một tham gia đơn giản) là chính xác KHÔNG phải là một câu hỏi FizzBuzz. Câu hỏi FizzBuzz là về việc liệu bạn có thể - trong mã, mã giả hay bất kỳ điều gì - mô tả CÁCH bạn sẽ làm điều gì đó. Tôi sẽ không downvote này bởi vì tôi nghĩ rằng đó là một câu trả lời tốt. Bạn nên sửa lại phần cú pháp, IMO. –

+1

@yar, tôi đồng ý ** cách ** quan trọng hơn ** cú pháp **, tuy nhiên, nhà phát triển sẽ có thể nhớ cú pháp rất cơ bản của ngôn ngữ họ sử dụng. Đối với câu hỏi của OP cụ thể, ông hỏi về một câu hỏi SQL, do đó, mã giả không áp dụng, đây là SQL. Bất kỳ nhà phát triển nào làm việc với SQL đều có thể nhớ cú pháp nối đơn giản. –

+0

Có lẽ đúng ... đặc biệt là vì OP đã yêu cầu "lập trình viên sql" ... –

-1

SQL Developer hoặc SQL DBA? cho một nhà phát triển một cái gì đó về con trỏ; cú pháp là một nỗi đau và một cú pháp tốt sẽ đặt câu hỏi tại sao bạn cần sử dụng nó. Đối với một dba cung cấp cho họ một con trỏ và yêu cầu họ sửa chữa nó;)

+2

Bạn thực sự không muốn ai đó biết cú pháp con trỏ tắt con dơi. Các nhà phát triển KHÔNG nên viết con trỏ rất thường xuyên. – HLGEM

+1

Tôi không nghĩ rằng con trỏ là cách tiếp cận đúng. Nó phải là một cái gì đó cơ bản. –

+3

Thay vào đó, hãy cung cấp cho họ một ví dụ về con trỏ đơn giản và cho phép họ viết truy vấn thực hiện tương tự mà không có con trỏ. – Guffa

3

Tôi có thể làm một cái gì đó đòi hỏi một tham gia bên trong, bên trái và một mệnh đề where với cả một điều kiện AND và OR. Đồng thời xác định trường nào bạn muốn trả về. Bạn sẽ tìm kiếm xem họ có nhận ra rằng họ cần một sự nối kết trái khỏi mô tả sự cố, rằng họ sử dụng cú pháp tham gia rõ ràng và họ sử dụng() để làm cho ý nghĩa của và/hoặc rõ ràng. Bạn cũng sẽ xem xét xem họ có sử dụng lựa chọn * ngay cả khi bạn đã chỉ định trường nào bạn muốn.

8

Một "FizzBuzz" được cho là đơn giản đến nỗi bất kỳ ai có thể lập trình đều có thể giải quyết nó, và một lập trình viên giỏi có thể giải quyết nó hầu như không suy nghĩ, phải không?

Vì vậy, có lẽ một cái gì đó như thế này:

Trước tiên, hãy hai bảng, Nhân viênSở, với khóa ngoại từ Nhân viên cho thấy những bộ phận mỗi nhân viên làm việc cho. (Ví dụ nhàm chán điển hình, từ gần như bất kỳ sách giáo khoa cơ sở dữ liệu nào.) Sau đó cho phép họ viết truy vấn liên quan đến cả hai bảng, chẳng hạn như "cung cấp cho tôi tên của tất cả nhân viên làm việc cho bộ phận Vệ sinh".

Sau đó thực hiện chính xác điều tương tự, nhưng không phải với nhân viên làm việc cho các phòng ban, nhưng với những con chuột được mèo ăn hoặc một thứ khác không phải là bản sao chính xác của bộ phận nhân viên hoặc sinh viên trong sách giáo khoa cơ sở dữ liệu.

Nếu họ có thể tìm thấy ai làm việc tại bộ phận Vệ sinh, nhưng không biết làm thế nào để tìm được con mèo nào đã ăn mèo Tom, đừng thuê!

+0

Đây là ý tưởng đúng - tôi thích cách tiếp cận này. –

0

Gắn bó với fizzbuzz, chỉ cần thay đổi số từ 100 đến 10000000 và nói rằng giải pháp phải có hiệu quả hợp lý.

+4

Vấn đề là fizzbuzz không kiểm tra kiến ​​thức SQL cơ bản, vì các ý tưởng cơ bản đang nối các bảng và như vậy, không viết thao tác dữ liệu trong mệnh đề SELECT. –

Các vấn đề liên quan