本文最后更新于:2022年4月9日 中午
题目描述
查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)
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` ));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` ));
输入描述
无
输出描述
emp_no
salary
10011
25828
省略
省略
10001
60117
题解
select e.emp_no, s.salary from salaries as s inner join employees as e on e.emp_no=s.emp_no and e.hire_date=s.from_date order by e.emp_no desc ; 或select emp_no, salary from salaries group by emp_no having min (from_date) order by emp_no desc ;
备注:
having子句 :类似于where子句,是用来进行条件筛选数据的
having子句本身是针对分组统计结果进行条件筛选 的
having子句必须出现在group by子句之后(如果同时存在)
having针对的数据是在内存里已经加载的数据
having几乎能做where能做的所有事,但是where却不一定
字段别名(where针对磁盘数据,那时还没有)
统计结果(where在group by之前)
分组统计函数(having通常是针对group by存在的)