Oracle笔试题集锦:SQL查询与数据分析

需积分: 10 6 下载量 36 浏览量 更新于2024-09-19 收藏 49KB DOC 举报
Oracle笔试题涵盖了SQL查询技巧和数据库管理的多个方面,以下是针对每个问题的详细解析: 1. 高效查询各班最高成绩 该问题考察了如何使用`GROUP BY`和`MAX`函数来找出每个班级的成绩最高分。SQL语句 `SELECT Fclass, MAX(Fscore) FROM table1 GROUP BY Fclass` 的目的是按照班级`Fclass`对成绩`Fscore`进行分组,并返回每个班级的最大成绩。这将得到每个班级及其对应的最佳成绩。 2. 查找具有多个不同Fno的记录 这个问题要求找出`FID`字段具有两个或更多不同`Fno`值的记录。SQL语句 `SELECT * FROM table1 WHERE FID IN (SELECT FID FROM table1 GROUP BY FID HAVING COUNT(DISTINCT Fno) >= 2)` 使用子查询找出`FID`在原表中有多个不同`Fno`的行,然后在外层查询中选择这些行。 3. 计算不同员工薪酬和年龄条件的数量 在处理大量数据时,这个SQL关注的是根据`Fsalary`和`Fage`字段的不同组合计算人数。使用`CASE`语句和`SUM`函数,你可以快速得到四种情况下的员工数量,如:高薪且年龄大于35岁的员工、高薪且年龄小于35岁的员工、低薪且年龄大于35岁的员工以及低薪且年龄小于35岁的员工。 4. 求所有人每月及上月和下月的总收入 对于表A,你需要获取每个人的月度收入并扩展到上月和下月。SQL语句可能涉及窗口函数`LAG`(用于获取前一记录的值)和`LEAD`(获取后一记录的值),但题目没有给出具体格式,所以假设使用`sysdate`和`add_months`函数,可能会这样写: ``` SELECT Month, income AS 当月收入, LAG(income) OVER (ORDER BY Month) AS 上月收入, LEAD(income, 1) OVER (ORDER BY Month) AS 下月收入 FROM (SELECT Month, person, income FROM TableA ORDER BY Month) subquery WHERE Month = TO_CHAR(SYSDATE, 'YYYYMM') ``` 这段SQL首先按月份排序,然后获取当前月、上月和下月的收入。 总结来说,Oracle笔试题涉及到了SQL查询基础(如分组、聚合、子查询)、复杂条件筛选、以及窗口函数在时间序列数据上的应用。这些知识点展示了Oracle数据库管理员和开发人员需要具备的关键技能。