SQL面试题解析:部门平均工资与非人力资源部查询

3 下载量 36 浏览量 更新于2024-06-28 收藏 201KB DOC 举报
"这些题目是关于SQL数据库的经典面试与笔试问题,涵盖了数据筛选、聚合函数、排序以及联接操作等核心概念。" 在SQL数据库面试和笔试中,掌握基础及高级查询技巧至关重要。以下是给定文件中的一些问题及其解答: 问题28: 此题考察了如何根据指定条件对结果进行筛选和排序。要求列出所有部门名称(不包含"human resource")并计算每个部门的平均工资。解题的关键在于使用`WHERE`子句排除特定部门,并用`GROUP BY`和`AVG()`函数来分组和计算平均值。最后,使用`ORDER BY`对结果进行部门名称的升序排序。 ```sql SELECT depart_name, AVG(wage) FROM employee WHERE depart_name <> 'human resource' GROUP BY depart_name ORDER BY depart_name; ``` 问题29: 此题挑战了在不使用内置统计函数的情况下找到数据表中最小的数值。解决方案是通过`ORDER BY`对`num`列进行降序排列,然后使用`TOP 1`选择第一条记录,即最小值。 ```sql SELECT TOP 1 num FROM Test ORDER BY num; ``` 问题33: 这道题涉及到两个表之间的联接操作以及聚合函数的使用。目标是计算每个客户(Customer)的总收入(Revenue)。首先创建了两个表,一个是`Customer`,另一个是`Order`,并且`Order`表通过`CustomerID`外键关联到`Customer`表的`ID`。解答时,可以使用`FULL JOIN`或`INNER JOIN`来连接两个表,然后使用`SUM()`函数计算每个客户的收入总和,并通过`GROUP BY`对客户ID进行分组。 ```sql -- 使用FULL JOIN方法 SELECT Customer.ID, SUM(ISNULL([Order].Revenue, 0)) FROM Customer FULL JOIN [Order] ON ([Order].CustomerID = Customer.ID) GROUP BY Customer.ID; -- 或者使用INNER JOIN方法 SELECT Customer.ID, SUM(Order.Revenue) FROM Customer INNER JOIN Order ON Customer.ID = Order.CustomerID GROUP BY Customer.ID; ``` 以上问题的解答展示了SQL在处理数据查询、筛选、聚合、排序和表间关系时的基本用法,这些都是数据库管理和开发中的关键技能。在面试或实际工作中,理解并熟练运用这些概念是至关重要的。