牛客数据库SQL实战刷题记录 D-4

牛客数据库SQL实战刷题记录 D-4

1. 题目:获取所有部门中当前员工薪水最高的相关信息

  • 题目描述:
获取所有部门中当前员工薪水最高的相关信息,
给出dept_no, emp_no以及其对应的salary
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
  • 输出:
dept_noemp_nosalary
d0011000188958
d0021000643311
d0031000594692
d0041000474057
d0051000788070
d0061000995409
  • 代码:
SELECT dep.dept_no, dep.emp_no, MAX(s.salary)
FROM dept_emp as dep
INNER JOIN salaries as s
ON dep.emp_no=s.emp_no
WHERE dep.to_date='9999-01-01'
AND s.to_date='9999-01-01'
GROUP BY dep.dept_no
  • 思路:
  1. 利用MAX()函数,找出最高薪水;
  2. 限制两张表的emp_no相同,用INNER JOIN连接两张表;
  3. 当前日期即to_date‘9999-01-01’
  4. 因为要找出每个部门最高薪水的员工,所以用GROUP BY给部门分组

2. 题目:从titles表获取按照title进行分组

  • 题目描述:
从titles表获取按照title进行分组,每组个数大于等于2,
给出title以及对应的数目t。
CREATE TABLE IF NOT EXISTS "titles" (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
  • 输出:
titlet
Assistant Engineer2
Engineer4
省略省略
Staff3
  • 代码:
SELECT title, COUNT(title) as t
FROM titles
GROUP BY title
HAVING COUNT(title)>=2
  • 思路:
    利用COUNT()函数计算每个title出现的次数并记为t;HAVING 函数和合计函数一起使用找出title次数大于等于两次的

3. 题目:从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略

  • 题目描述:
从titles表获取按照title进行分组,每组个数大于等于2,
给出title以及对应的数目t。
注意对于重复的title进行忽略。
CREATE TABLE IF NOT EXISTS `titles` (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
  • 输出:
titlet
Assistant Engineer2
Engineer3
省略省略
Staff3
  • 代码:
SELECT title, COUNT(DISTINCT emp_no) as t
FROM titles
GROUP BY title
HAVING t>=2
  • 思路:
    这题题目没写清楚,是对于同一title的重复的emp_no省略哇。所以只要用DISTINCT找出不同的emp_no就好了。

4. 题目:查找employees表

  • 题目描述:
查找employees表所有emp_no为奇数,
且last_name不为Mary的员工信息,
并按照hire_date逆序排列
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
  • 输出:
emp_nobirth_datefirst_namelast_namegenderhire_date
100111953-11-07MarySluisF1990-01-22
100051955-01-21KyoichiMaliniakM1989-09-12
100071957-05-23TzvetanZielinskiF1989-02-10
100031959-12-03PartoBamfordM1986-08-28
100011953-09-02GeorgiFacelloM1986-06-26
100091952-04-19SumantPeacF1985-02-18
  • 代码:
SELECT * FROM employees
WHERE employees.emp_no%2=1
AND last_name <> "Mary"
ORDER BY hire_date DESC
  • 思路:
    奇数:number%2=1或mod(number,2)=1
    偶数:number%2=0或mod(number,2)=0
    <>表示不等于
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值