目录
-
- 61. 对于employees表中,给出奇数行的first_name
- 59. 获取有奖金的员工相关信息。
- 57. 使用含有关键字exists查找未分配具体部门的员工的所有信息。
- 55. 分页查询employees表,每5行一页,返回第2页的数据
- 54. 查找排除当前最大、最小salary之后的员工的平均工资avg_salary
- 53. 按照dept_no进行汇总
- 52. 获取Employees中的first_name
- 51. 查找字符串 10,A,B 中逗号,出现的次数cnt
- 49. 针对库中的所有表生成select count(*)对应的SQL语句
- 46. 在audit表上创建外键约束,其emp_no对应employees_test表的主键id
- 47. 如何获取emp_v和employees有相同的数据no
- 45. 将titles_test表名修改为titles_2017
- 44. 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
- 43. 将所有to_date为9999-01-01的全部更新为NULL
- 42. 删除emp_no重复的记录,只保留最小的id对应的记录。
- 41. 构造一个触发器audit_log
- 40. 在last_update后面新增加一列名字为create_date
- 39. 针对上面的salaries表emp_no字段创建索引idx_emp_no
- 38. 针对actor表创建视图actor_name_view
- 37. 对first_name创建唯一索引uniq_idx_firstname
- 36. 创建一个actor_name表
- 35. 批量插入数据,不使用replace操作
- 34. 批量插入数据
- 33. 创建一个actor表,包含如下列信息
- 31. 获取select * from employees对应的执行计划
- 28. 查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部
- 22. 统计各个部门的工资记录数
- 21. 查找所有员工自入职以来的薪水涨幅情况
- 19. 查找所有员工的last_name和first_name以及对应的dept_name
- 17. 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
- 12. 获取所有部门中当前员工薪水最高的相关信息
- 10. 获取所有非manager的员工emp_no
- 9. 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary
- 5. 查找所有员工的last_name和first_name以及对应部门编号dept_no
- 2. 查找入职员工时间排名倒数第三的员工所有信息
61. 对于employees表中,给出奇数行的first_name
SELECT first_name
FROM (
SELECT e1.first_name, COUNT(e2.first_name) AS idx
FROM employees e1, employees e2
WHERE e1.first_name >= e2.first_name
GROUP BY e1.first_name
HAVING idx%2 =1);
未解之谜,一道我怎么看都觉得写的没问题,用SQLite online测试也没问题,但就是在牛客输出有问题的query:
等待大神解答。
59. 获取有奖金的员工相关信息。
SELECT e.emp_no, e.first_name, e.last_name, eb.btype, s.salary,
CASE eb.btype
WHEN 1 THEN 0.1 * s.salary
WHEN 2 THEN 0.2 * s.salary
ELSE 0.3 * s.salary
END bonus
FROM salaries s
INNER JOIN employees e
ON s.emp_no = e.emp_no
AND s.to_date = '9999-01-01'
INNER JOIN emp_bonus eb
ON s.emp_no = eb.emp_no
ORDER BY e.emp_no;
考察CASE的用法:SQLite CASE
57. 使用含有关键字exists查找未分配具体部门的员工的所有信息。
SELECT e.*
FROM employees e
WHERE NOT EXISTS (
SELECT d.emp_no
FROM dept_emp d
WHERE e.emp_no = d.emp_no);
55. 分页查询employees表,每5行一页,返回第2页的数据
SELECT *
FROM employees
LIMIT 5,5
读题,每5行一页,返回第2页的数据,那就是要6-10的数据,也就是从5后5条数据,所以是 LIMIT 5,5。
54. 查找排除当前最大、最小salary之后的员工的平均工资avg_salary
SELECT AVG(salary) AS avg_salary
FROM salaries
WHERE salary NOT IN (
SELECT MAX(salary)
FROM salaries
WHERE to_date = '9999-01-01')
AND salary NOT IN (
SELECT MIN(salary)
FROM salaries
WHERE to_date