python测试开发班——SQL作业帖

7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

4. 计算各个部门的平均工资并排序,给出平均工资、部门名称

1 Like
  1. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名
    select concat(first_name,’_’,last_name) from employees where emp_no in (10025,10223,10252);

  2. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号
    select emp_no from salaries GROUP BY emp_no having emp_no like ‘%23’ or ‘%25%’;

  3. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息
    select emp_no from salaries GROUP BY emp_no having count(*)>17 and emp_no like ‘%25%’;

  4. 计算各个部门的平均工资并排序,给出平均工资、部门名称
    select dept_name, avg(salary) from departments de left join dept_emp dp on de.dept_no=dp.dept_no left join salaries sa on sa.emp_no=dp.emp_no GROUP BY dept_name order by avg(salary);

占楼。。。。。。。

7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
	first_name,
	last_name 
FROM
	employees 
WHERE
	emp_no IN ('10025','10223',	'10252');

8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

SELECT DISTINCT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%23' 
	OR emp_no LIKE '%25%';

11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%25%' 
GROUP BY
	emp_no 
HAVING
	count( emp_no ) >= 17;
1 Like

7.公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
	first_name,
	last_name 
FROM
	employees 
WHERE
	emp_no IN (
		'10025',
		'10223',
	    '10252');
  1. 公司抽奖,从工资表中所有的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号
SELECT DISTINCT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%25%' 
	OR (
		emp_no LIKE '%23' 
	AND emp_no LIKE '%25%');
  1. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息
SELECT
	emp_no
FROM
	salaries 
GROUP BY
	emp_no 
HAVING
	COUNT( emp_no )> 17 
	AND emp_no LIKE '%25%';
1 Like

第7题
select emp_no,first_name,last_name from employees where emp_no in (10025,10223,10252);
image
第8题
select emp_no from employees where emp_no like ‘%23’ or emp_no like ‘%25%’;


第11题
select t1.emp_no from (select emp_no from salaries group by emp_no having count(*)>17) t1 where t1.emp_no like ‘%25%’;

第4题
分析:统计部门工资,工资要是最新的工资,所以要用max(to_date);查询的部门员工必须在职,所以要用到now()过滤出在职员工
SELECT t5.dept_name,avg(t3.salary) avg_salary FROM departments t5,dept_emp t4,(
SELECT t2.emp_no,t2.salary FROM salaries t2,(
SELECT emp_no,max(to_date) to_date FROM salaries GROUP BY emp_no HAVING to_date>=now()) t1 WHERE t2.emp_no=t1.emp_no AND t2.to_date=t1.to_date) t3 WHERE t5.dept_no=t4.dept_no AND t4.emp_no=t3.emp_no GROUP BY t5.dept_no ORDER BY avg_salary DESC;

image

1 Like

公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT emp_no,first_name,last_name from employees where emp_no in (10025,10223,10252);

从工资表中查询员工编号含有25且以23结尾(含有25或以23结尾的员工工号)

select DISTINCT emp_no from salaries where emp_no like '%25%23';
select DISTINCT emp_no from salaries where emp_no like '%25%' or emp_no LIKE '%23';

统计下员工入职以来调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT emp_no,count(*) from salaries where emp_no like '%25%' group by emp_no HAVING count(emp_no)>17;

计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT d.dept_name '部门名称',avg(s.maxs) '平均工资' from dept_emp de RIGHT JOIN (
SELECT emp_no,max(salary) maxs from salaries GROUP BY emp_no) s
on de.emp_no=s.emp_no LEFT JOIN departments d on de.dept_no=d.dept_no
GROUP BY de.dept_no ORDER BY avg(s.maxs);
1 Like

公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

select emp_no,first_name, last_name from employees where emp_no in (10025,10223,10252);

公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

select emp_no from salaries where (emp_no like ‘%23’ and emp_no like ‘%25%’) or emp_no like ‘%25%’;

练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

select emp_no,count(1) from salaries where emp_no like ‘%25%’ group by emp_no having count(1) >=17 order by count(1) desc;

计算各个部门的平均工资并排序,给出平均工资、部门名称

select d.dept_no, d.dept_name ,avg(s.salary) avgSalary from departments d,salaries s, dept_emp p where s.emp_no = p.emp_no and p.dept_no=d.dept_no group by d.dept_no order by avgSalary desc;

1 Like

7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
	emp_no,
	first_name,
	last_name
FROM
	employees 
WHERE
	emp_no IN('10025','10223','10252');

##结果
image

8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

SELECT
	emp_no
FROM
	employees 
WHERE
	(emp_no LIKE '%23'
	and emp_no LIKE'%25%') or emp_no LIKE'%25%';

##结果
image

11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no,COUNT(emp_no)
FROM
	salaries  
GROUP BY
	emp_no 
HAVING
	COUNT( emp_no ) > 17 
	AND emp_no LIKE '%25%';

##结果

4. 计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT 
c.dept_name,
b.dept_no,
AVG(a.salary)
FROM salaries a
LEFT JOIN
dept_emp b 
ON a.emp_no = b.emp_no
LEFT JOIN
departments c
ON b.dept_no = c.dept_no
GROUP BY b.dept_no
ORDER BY AVG(a.salary) DESC 
;
#HAVING AVG(a.salary);

##结果
image

1 Like

统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no,
	COUNT(*) 
FROM
	salaries 
WHERE
	emp_no LIKE '%25%' 
GROUP BY
	emp_no 
HAVING
	COUNT(*) > 17;

计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT
	d.dept_name,
	t.dept_avg_salary 
FROM
	departments d
	LEFT JOIN (
SELECT
	e.dept_no,
	AVG( s.salary ) dept_avg_salary 
FROM
	dept_emp e
	LEFT JOIN salaries s ON e.emp_no = s.emp_no 
GROUP BY
	e.dept_no 
	) t ON d.dept_no = t.dept_no 
ORDER BY
	t.dept_avg_salary;

1 Like

#7、公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT first_name,last_name FROM employees WHERE emp_no IN ('10025','10223','10252')

#8、公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

SELECT DISTINCT emp_no from salaries WHERE emp_no like '%25%23' 
SELECT DISTINCT emp_no from salaries WHERE emp_no like '%25%' 

#11、统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT emp_no FROM salaries  WHERE emp_no like '%25%' GROUP BY emp_no HAVING COUNT(*) >17

#4、计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT t2.dept_name, AVG(t3.salary) as '平均工资' FROM dept_emp t1,departments t2,salaries t3 where t1.dept_no = t2.dept_no and t3.emp_no = t1.emp_no GROUP BY t2.dept_name
1 Like

1.公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
	first_name,
	last_name
FROM
	employees
WHERE
	emp_no = 10025
OR emp_no = 10223
OR emp_no = 10252;

或者

SELECT
	first_name,
	last_name
FROM
	employees
WHERE
	emp_no IN (10025, 10223, 10252);

2.公司抽奖,从工资表中所有的员工编号,并且只要编号以23结尾(含有25) 或 含有25的员工工号

SELECT DISTINCT
	emp_no
FROM
	salaries
WHERE
	(
		emp_no LIKE '%23'
		AND emp_no LIKE '%25%'
	)
OR emp_no LIKE '%25%';

3.统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no,
	count(*)
FROM
	salaries
GROUP BY
	emp_no
HAVING
	COUNT(*) > 17
AND emp_no LIKE '%25%';

4.计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT
	d.dept_name,
	AVG(s.salary) sa
FROM
	departments d
LEFT JOIN dept_emp e ON d.dept_no = e.dept_no
LEFT JOIN salaries s ON s.emp_no = e.emp_no
GROUP BY
	d.dept_name
ORDER BY
	sa DESC;
SELECT
	d.dept_name,
	AVG(s.salary)
FROM
	departments d,
	dept_emp e,
	salaries s
WHERE
	d.dept_no = e.dept_no
AND s.emp_no = e.emp_no
GROUP BY
	dept_name
ORDER BY
	AVG(s.salary) DESC;
1 Like

7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

select first_name,last_name from employees where emp_no in (10025,10223,10252);

8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

select distinct emp_no from salaries where emp_no like '%23' or emp_no like '%25%';

11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

sele65ct emp_no,count(emp_no) from salaries where emp_no like '%25%' group by(emp_no) having count(emp_no)>17 ;

4. 计算各个部门的平均工资并排序,给出平均工资、部门名称

 select departments.dept_name,dept_salaries.avg_salary from departments inner join
(select dept_emp.dept_no,avg(salaries.salary) avg_salary from dept_emp left join
 salaries on dept_emp.emp_no = salaries.emp_no group by(dept_emp.dept_no) order
 by avg(salaries.salary) asc) dept_salaries on departments.dept_no = dept_salaries.dept_no;

1 Like
-- 7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名
select u.first_name, u.last_name from employees.employees as u where u.emp_no in ('10025', '10223', '10252');

-- 8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号
select count(*) from employees.salaries where emp_no LIKE "%23" or emp_no Like "%25"; -- 统计员工编号是  23 25 的数量
select * from employees.salaries where emp_no LIKE "%23" or emp_no Like "%25"; -- 统计员工编号是  23 25 的数量

-- 11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息
SELECT emp_no, COUNT(*) FROM employees.salaries WHERE emp_no LIKE "%25%" GROUP BY emp_no HAVING COUNT( emp_no ) >= 17;


1 Like

6. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

select emp_no, first_name, last_name from employees where emp_no in (10025, 10223, 10252);

7. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

select DISTINCT emp_no from salaries where emp_no like '%25%' and emp_no like '%23';
select DISTINCT emp_no from salaries where emp_no like '%25%' or emp_no like '%23';

8. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

select emp_no, COUNT(*) from salaries GROUP BY emp_no HAVING COUNT(*)>17 and emp_no like'%25%';
1 Like

公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
first_name,
last_name
FROM
	employees
WHERE
	emp_no IN(10025,10223,10252);

公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

SELECT DISTINCT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%25%23' 
	OR emp_no LIKE '%25%';

练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no 
FROM
	salaries 
GROUP BY
	emp_no 
HAVING
	COUNT( emp_no )>= 17 
	AND emp_no LIKE '%25%';

计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT
	a.dept_name,
	AVG( salary ) 
FROM
	departments a
	RIGHT JOIN dept_emp b ON a.dept_no = b.dept_no
	RIGHT JOIN salaries c ON c.emp_no = b.emp_no 
GROUP BY
	a.dept_no 
ORDER BY
	avg( salary ) DESC;
1 Like
use employees;
#7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名
select emp_no, first_name, last_name from employees where emp_no in (10025,10223,10252);
#8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号
select emp_no from employees where emp_no like '%23' or emp_no like '%25%';
#11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息
select emp_no, count(emp_no) from salaries group by emp_no having count(emp_no) > 17 and emp_no like '%25%';
select emp_no, count(emp_no) from salaries where emp_no like '%25%' group by emp_no having count(emp_no) > 17; #更优
#计算各个部门的平均工资并排序,给出平均工资、部门名称
select d2.dept_name, avg(s2.salary) avg_s from salaries s2
left join dept_emp dep_e on s2.emp_no = dep_e.emp_no
left join departments d2 on dep_e.dept_no = d2.dept_no
group by (d2.dept_no)
order by avg_s desc; #降序
1 Like

7. 公司抽奖,只有10025,10223,10252三位员工中奖了,需要查出这三位员工的姓名

SELECT
	first_name,
	last_name 
FROM
	employees 
WHERE
	emp_no IN ('10025','10223',	'10252');

8. 公司抽奖,从工资表中所以的员工编号,并且只要编号以23结尾(含有25)或含有25的员工工号

SELECT DISTINCT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%23' 
	OR emp_no LIKE '%25%';

11. 练习题 统计下员工入职以来,调薪次数有17次以上的员工编号,且编号里含有25的所有员工编号信息

SELECT
	emp_no 
FROM
	salaries 
WHERE
	emp_no LIKE '%25%' 
GROUP BY
	emp_no 
HAVING
	count( emp_no ) >= 17;

4. 计算各个部门的平均工资并排序,给出平均工资、部门名称

SELECT
	a.dept_name,
	avg(salary)
FROM
	departments a,
	dept_emp b,
	salaries c
WHERE
	a.dept_no = b.dept_no
AND c.emp_no = b.emp_no
GROUP BY
	a.dept_name
ORDER BY
	avg(salary)
1 Like
    SELECT first_name,last_name FROM employees WHERE emp_no IN(10025,10223,10252);

    SELECT emp_no FROM salaries WHERE emp_no LIKE '%23' OR emp_no LIKE '%25%';

    SELECT emp_no,count(emp_no) FROM salaries WHERE emp_no LIKE '%25%' GROUP BY emp_no HAVING count(emp_no) > 17;

    SELECT d.dept_name,avg(s.salary) FROM departments AS d 
	LEFT JOIN dept_emp AS de ON d.dept_no = de.dept_no
        LEFT JOIN salaries AS s ON de.emp_no = s.emp_no
	GROUP BY d.dept_name ORDER BY avg(s.salary);
1 Like

第七题
image
第八题
image
第十一题
image
第四题
image

1 Like
关闭