有一个薪水表,salaries简况如下: emp_no salary from_date to_date 10001 72527 2002-06-22 9999-01-01 10002 72527 2001-08-02 9999-01-01 10003 43311 2001-12-01 9999-01-01 请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示,以上例子输出如下: salary 72527 43311
时间: 2023-06-12 12:05:42 浏览: 62
可以使用以下SQL语句查询:
```
SELECT DISTINCT SUBSTRING_INDEX(salary, '', 1) AS salary
FROM salaries
ORDER BY salary DESC
```
其中,DISTINCT关键字用于去重,SUBSTRING_INDEX函数用于截取salary字段中的数字部分。ORDER BY子句用于按逆序排序。
相关问题
有一个薪水表salaries简况如下: emp_no salary from_date to_date 10001 88958 2002-06-22 9999-01-01 10002 72527 2001-08-02 9999-01-01 10003 43311 2001-12-01 9999-01-01 10004 72527 2001-12-01 9999-01-01 对所有员工的薪水按照salary降序先进行1-N的排名,如果salary相同,再按照emp_no升序排列: emp_no salary t_rank 10001 88958 1 10002 72527 2 10004 72527 2 10003 43311 3
可以使用 MySQL 的变量和子查询来实现此需求:
```
SELECT emp_no, salary,
@rank := IF(@prevSalary = salary, @rank + 1, 1) AS t_rank,
@prevSalary := salary
FROM salaries, (SELECT @rank := 0, @prevSalary := NULL) AS vars
ORDER BY salary DESC, emp_no ASC;
```
这个查询中,使用了 MySQL 的变量 `@rank` 和 `@prevSalary` 来保存前一行的薪水和当前排名。在查询结果中,先按照薪水 `salary` 降序排列,然后按照员工编号 `emp_no` 升序排列。在查询过程中,对每个员工的薪水进行排名,如果薪水相同,排名加 1,否则排名重置为 1。
查询结果如下:
```
+--------+--------+--------+
| emp_no | salary | t_rank |
+--------+--------+--------+
| 10001 | 88958 | 1 |
| 10002 | 72527 | 2 |
| 10004 | 72527 | 2 |
| 10003 | 43311 | 3 |
+--------+--------+--------+
```
有一个员工表employees简况如下: emp_no birth_date first_name last_name gender hire_date 10001 1953-09-02 Georgi Facello M 2001-06-22 10002 1964-06-02 Bezalel Simmel F 1999-08-03 有一个薪水表salaries简况如下: emp_no salary from_date to_date 10001 85097 2001-06-22 2002-06-22 10001 88958 2002-06-22 9999-01-01 10002 72527 1999-08-03 2000-08-02 10002 72527 2000-08-02 2001-08-02 请你查找在职员工自入职以来的薪水涨幅情况,给出在职员工编号emp_no以及其对应的薪水涨幅growth
可以通过联结两个表,计算每名员工的薪水涨幅情况。
SQL查询语句如下:
```
SELECT e.emp_no, (s.salary - s_prev.salary) AS growth
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
JOIN salaries s_prev ON s.emp_no = s_prev.emp_no
AND s.from_date > s_prev.to_date
AND s_prev.to_date = (
SELECT MAX(to_date)
FROM salaries
WHERE emp_no = s.emp_no
AND to_date < s.from_date
)
WHERE s.to_date = '9999-01-01'
```
解释:
首先,我们联结了两个薪水表,使用了自连接,并且使用了子查询来获取员工上一次薪水记录的to_date,这是为了计算薪水涨幅。
然后,我们筛选出在职员工,即薪水表中to_date为9999-01-01的员工。
最后,我们计算每个员工的薪水涨幅,并且返回员工编号和涨幅。