有一个薪水表,salaries简况如下: emp_no salary from_date to_date 10001 60117 1986-06-26 1987-06-26 10001 62102 1987-06-26 1988-06-25 10001 66074 1988-06-25 1989-06-25 10001 66596 1989-06-25 1990-06-25 10001 66961 1990-06-25 1991-06-25 10001 71046 1991-06-25 1992-06-24 10001 74333 1992-06-24 1993-06-24 10001 75286 1993-06-24 1994-06-24 10001 75994 1994-06-24 1995-06-24 10001 76884 1995-06-24 1996-06-23 10001 80013 1996-06-23 1997-06-23 10001 81025 1997-06-23 1998-06-23 10001 81097 1998-06-23 1999-06-23 10001 84917 1999-06-23 2000-06-22 10001 85112 2000-06-22 2001-06-22 10001 85097 2001-06-22 2002-06-22 10002 72527 1996-08-03 1997-08-03 请你查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t,以上例子输出如下: emp_no t 10001 16
时间: 2023-06-12 14:05:43 浏览: 86
可以使用以下SQL语句来查询薪水记录超过15条的员工号和对应的记录次数t:
```
SELECT emp_no, COUNT(*) AS t
FROM salaries
GROUP BY emp_no
HAVING COUNT(*) > 15;
```
输出结果为:
```
emp_no t
10001 16
```
相关问题
有一个员工表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的员工。
最后,我们计算每个员工的薪水涨幅,并且返回员工编号和涨幅。
有一个全部员工的薪水表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 有一个各个部门的领导表dept_manager简况如下: dept_no emp_no to_date d001 10001 9999-01-01 d002 10003 9999-01-01 请你查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列,以上例子输出如下: emp_no salary from_date to_date dept_no 10001 88958 2002-06-22 9999-01-01 d001 10003 43311 2001-12-01 9999-01-01 d002
以下是查询语句:
```
SELECT s.emp_no, s.salary, s.from_date, s.to_date, dm.dept_no
FROM salaries s
JOIN dept_manager dm ON s.emp_no = dm.emp_no AND dm.to_date = '9999-01-01'
ORDER BY s.emp_no ASC;
```
解析:
1. 使用 JOIN 连接 salaries 和 dept_manager 表,在两个表的 emp_no 列匹配的情况下。
2. 添加额外的限制条件 dm.to_date = '9999-01-01',以确保只选择当前领导。
3. 选择需要的列,并按照 emp_no 升序排序。
输出结果应该如下:
```
emp_no | salary | from_date | to_date | dept_no
---------+-----------+------------+------------+--------
10001 | 88958 | 2002-06-22 | 9999-01-01 | d001
10003 | 43311 | 2001-12-01 | 9999-01-01 | d002
```
阅读全文