SQL 面试题

本文介绍了一个具体的SQL查询案例,需求为从包含A、B、C三列的test表中,根据特定条件选择输出A列或B列的数据。通过使用CASE WHEN语句实现这一功能。
test表中有A,B,C三列,
要求:
查询表中的数据,当A列大于B列时输出A的,B列大于C的时输出B的,请问怎么写SQL语句呀?

select case when a > b then a end as a,case when b > c then b end as b from test;
### SQL 面试题及答案 以下是几道经典的 SQL 面试题,涵盖从基础到高级的难度,适合不同层次的求职者准备面试时参考。 #### 1. 查询员工表中工资最高的前三名员工 假设有一个名为 `employees` 的表,包含以下字段:`id`, `name`, `salary`。需要查询出工资最高的前三名员工。 ```sql SELECT id, name, salary FROM employees ORDER BY salary DESC LIMIT 3; ``` 此查询使用了 `ORDER BY` 和 `LIMIT` 来限制结果集的大小[^1]。 #### 2. 查询部门平均工资高于公司整体平均工资的部门 假设有一个名为 `departments` 的表,包含字段 `department_id`, `department_name`,以及一个名为 `employees` 的表,包含字段 `employee_id`, `department_id`, `salary`。 ```sql SELECT d.department_name, AVG(e.salary) AS avg_salary FROM departments d JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employees); ``` 这里通过子查询计算公司的整体平均工资,并与每个部门的平均工资进行比较[^2]。 #### 3. 查询每个部门中工资最高的员工 假设同样的表结构,要求查询每个部门中工资最高的员工信息。 ```sql SELECT e1.department_id, e1.name, e1.salary FROM employees e1 WHERE e1.salary = ( SELECT MAX(e2.salary) FROM employees e2 WHERE e1.department_id = e2.department_id ); ``` 这段代码利用了子查询和 `MAX()` 函数来获取每个部门的最高工资,并匹配相应的员工记录。 #### 4. 使用窗口函数查询每个部门工资排名前两名的员工 在现代 SQL 中,可以使用窗口函数实现更复杂的排序需求。 ```sql SELECT department_id, name, salary FROM ( SELECT department_id, name, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as rank_num FROM employees ) temp WHERE rank_num <= 2; ``` 这里使用了 `RANK()` 窗口函数对每个部门的员工按工资降序排列,并选取排名前两名的员工[^2]。 #### 5. 处理空值问题:查询所有员工及其对应的部门名称 假设有些员工没有分配到部门,即 `department_id` 为 `NULL`,需要显示这些员工的信息。 ```sql SELECT e.name AS employee_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id; ``` 通过使用 `LEFT JOIN`,即使某些员工没有对应的部门信息,也可以正确显示他们的记录。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值