【问题标题】:What is a good 'FizzBuzz' question for a SQL programmer?对于 SQL 程序员来说,什么是好的“FizzBu​​zz”问题?
【发布时间】:2009-11-23 15:24:12
【问题描述】:

我们正在招聘一名 SQL 程序员,需要一个类似于FizzBuzz question 的良好筛选问题,但针对的是 SQL。

虽然使用 SQL 编写 FizzBu​​zz 解决方案当然是可能的,但我认为这种努力是错误的。 FizzBu​​zz 问题评估编码基础知识,例如循环、条件、输出和基础数学。使用 SQL,我认为与查询、连接、投影等相关的东西会更合适。但是,就像 FizzBu​​zz 一样,它应该足够简单,“优秀”的 SQL 程序员可以在几分钟内在纸上写出解决方案。

对于 SQL 程序员来说,什么是一个好的“FizzBu​​zz”问题?

【问题讨论】:

  • 您是想询问仅仅是 SQL 查询构造,还是良好的数据库设计,例如E-R 图、导航等
  • 请他们写一个数据透视查询。如果他们可以在白板上完成,请雇用他们。
  • @Mike - 好问题。我的想法是与查询相关的,因为这是非常基本的,这是一个筛选问题。当然,其他领域将在面试过程的其他地方涉及。

标签: sql database


【解决方案1】:

我们通常使用这样的东西作为 SQL 的最低要求:

给定表格:

客户:客户 ID、客户名称

订单:OrderID、CustomerID、ProductName、UnitPrice、Quantity

计算显示 CustomerName 和 TotalPrice 的每个客户的订单总价值。

在我们看来,这是一个非常简单的问题,需要连接两个表、分组和聚合函数。我们很惊讶有多少人在与我们交谈过的人可能在他们的工作中编写数据库代码时不记得连接语法(而且我们从不在乎他们使用哪种语法,MSSQL 风格或 Oracle 风格或其他)。

我喜欢这个问题的地方在于它有助于跟进诸如

之类的问题

您如何找到所有订购总额超过 1000 美元的客户? 您将如何规范化这些表? 您将如何优化查询?

【讨论】:

  • 开发人员是否可以“记住连接语法”或必须在 Google 上查找(甚至进行简单的连接),这完全不是 FizzBu​​zz 的问题。 FizzBu​​zz 的问题是关于你是否可以——用代码、伪代码或其他方式——描述你将如何做某事。我不会对此投反对票,因为我认为这是一个很好的答案。您应该修改语法部分,IMO。
  • @yar,我同意 如何语法 更重要,但是,开发人员应该能够记住他们所使用的语言的非常基本的语法利用。关于OP的具体问题,他问了一个SQL问题,所以伪代码不适用,这是SQL。任何使用 SQL 的开发人员都应该能够记住简单的连接语法。
  • 如果你必须在你的广告数据库上查找连接语法,你就失败了!
  • 我会让 .NET 开发人员了解一些 SQL 语法或一些 Javascript 语法,但如果您正在招聘“SQL 程序员”,那么我希望他们知道您在第 9 页学习的语法任何 SQL 书籍。
  • @JoshBaltzell,每个商店都是不同的,并且会根据他们正在开发的特定应用程序有不同的要求。我们从不做任何与数据库无关的事情,因此每个人都需要具备 SQL 技能。
【解决方案2】:

“FizzBu​​zz”应该很简单,任何会编程的人都应该能够解决它,而一个好的程序员应该能够几乎不假思索地解决它,对吧?

所以可能是这样的:

首先,获取两个表,EmployeesDepartments,其中有一个来自 Employees 的外键,用于显示每个员工所在的部门。 (典型的无聊示例,几乎来自任何数据库教科书。)然后让他们编写一个涉及两个表的查询,例如“给我为清洁部门工作的所有员工的姓名”。

然后做完全相同的事情,但不是针对为部门工作的员工,而是针对被猫吃掉的老鼠,或者不是数据库中员工部门或学生课程示例的精确副本的其他东西教科书。

如果他们能找到清洁部门的工作人员,但不知道如何找到猫汤姆吃掉了哪些老鼠,那就不要雇用!

【讨论】:

    【解决方案3】:

    我可能会做一些需要内连接、左连接和带有 AND 和 OR 条件的 where 子句的事情。还要指定要返回的字段。您将查看他们是否认识到他们需要从问题描述中进行左连接,他们是否使用显式连接语法以及他们是否使用 () 来明确和/或的含义。即使您指定了所需的字段,您也会查看他们是否使用了 select *。

    【讨论】:

      【解决方案4】:

      坚持使用 fizzbuzz,只需将数字从 100 更改为 10000000,并说解决方案必须相当有效。

      【讨论】:

      • 问题是 fizzbuzz 不测试基本的 SQL 知识,因为基本思想是连接表等,而不是在 SELECT 子句中编写数据操作。
      【解决方案5】:

      SQL 开发人员还是 SQL DBA?对于开发人员来说,关于游标的东西;语法很痛苦,一个好的人会质疑你为什么需要使用它。对于 dba,给他们一个光标并要求他们修复它;)

      【讨论】:

      • 你真的不希望有人知道光标语法。开发人员不应该经常编写游标。
      • 我不认为游标是正确的方法。它应该是基本的东西。
      • 不如给他们一个简单的游标示例,让他们编写一个没有游标的查询。
      • @Guffa,好主意。显示他们是否理解迭代与基于集合的查询逻辑。
      • 游标语法高度依赖于您使用的数据库供应商。使用 Oracle 时,使用游标的语法非常简单。很多人说你不应该使用游标,因为游标很慢(呃)。为什么光标变慢的问题是一个非常复杂的问题,而不是 FizzBu​​zz 问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 2014-11-26
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多