【发布时间】:2015-05-10 18:05:54
【问题描述】:
我在使用子查询创建查询时遇到了一些问题。我必须使用子查询,因为这是学校的作业。
我有两张桌子,一张是员工桌子,一张是部门桌子。从这些表中,我必须返回收入超过部门平均工资的员工。
这就是我目前所拥有的:
SELECT
ename,
salary,
(SELECT
department.depname
FROM
department
WHERE
department.depno = employee.depno) AS depname,
(SELECT
AVG(salary)
FROM
employee
WHERE
employee.depno IN (SELECT
department.depno
FROM
department)) avgSalary
FROM
employee
WHERE
salary > (SELECT
AVG(salary)
FROM
employee
WHERE
employee.depno IN (SELECT
department.depno
FROM
department))
返回:
'JONES', '2975.00', 'RESEARCH', '2073.214286'
'BLAKE', '2850.00', 'SALES', '2073.214286'
'CLARK', '2450.00', 'ACCOUNTING', '2073.214286'
'SCOTT', '3000.00', 'RESEARCH', '2073.214286'
'KING', '5000.00', 'ACCOUNTING', '2073.214286'
'FORD', '3000.00', 'RESEARCH', '2073.214286'
但是平均工资返回所有工资的平均值。但我需要每个部门都这样做。
我知道如何通过执行以下查询来做到这一点:
SELECT
department.depname,
(SELECT
AVG(salary)
FROM
employee
WHERE
department.depno = employee.depno) avgSalary
FROM
department
返回:
ACCOUNTING 2916.666667
RESEARCH 2175.000000
SALES 1566.666667
OPERATIONS
但我不知道如何组合它们,或者不使用连接是否可以。
任何帮助将不胜感激
编辑:
Table: employee
Columns:
empno decimal(4,0) PK
ename varchar(10)
efunction varchar(10)
boss decimal(4,0)
employed date
salary decimal(7,2)
commission decimal(7,2)
depno decimal(2,0)
Table: department
Columns:
depno decimal(2,0) PK
depname varchar(14)
location varchar(13)
【问题讨论】:
-
您可以只发布...部门和员工的表架构吗?另外,您的作业是否指定了子查询需要定位的位置?
-
听起来你需要添加一个'group by'部门
标签: mysql sql subquery mysql-workbench