Mysql 特定条件的sql查询
我有一张像这样的桌子:Mysql 特定条件的sql查询,mysql,sql,sql-server-2008,select,group-by,Mysql,Sql,Sql Server 2008,Select,Group By,我有一张像这样的桌子: empId empSalary empDept 1 45000 IT 2 40000 IT 3 50000 SALES 4 60000 SALES 5 75000 IT 6 80000 IT 7 25000 OPS 8 30000 OPS 9 55000 MARKETING 10 60000 MARKETING 我必须编写一个查询,如下所示: select empId where empSal
empId empSalary empDept
1 45000 IT
2 40000 IT
3 50000 SALES
4 60000 SALES
5 75000 IT
6 80000 IT
7 25000 OPS
8 30000 OPS
9 55000 MARKETING
10 60000 MARKETING
我必须编写一个查询,如下所示:
select empId where empSalary > avg(empSalary) for each empDept
请帮忙。试试这个:
SELECT e.empId, e.empSalary, e.empDept
FROM employee e
INNER JOIN (SELECT e1.empDept, AVG(e1.empSalary) empSalary
FROM employee e1
GROUP BY e1.empDept
) a ON e.empDept = a.empDept AND e.empSalary > a.empSalary;
编辑
SELECT e.empDept, COUNT(DISTINCT e.empid) noOfEmployees
FROM employee e
INNER JOIN (SELECT AVG(e1.empSalary) empSalary FROM employee e1) a ON e.empSalary > a.empSalary
GROUP BY e.empDept;
可以是带有子查询的内容,大致如下所示:
SELECT empID FROM TABLE t
WHERE empSalary > (SELECT AVG(empSalary) FROM TABLE WHERE empDept = t.empDept)
但也可以使用性能可能更好的联接:
SELECT empID FROM TABLE t
JOIN (SELECT empDept, AVG(empSalary) AS avgSalary FROM TABLE GROUP BY empDept) averages
ON t.empDept = averages.empDept
WHERE t.empSalary > averages.avgSalary
编辑:根据下面的第一条评论,更新后的问题要求稍有不同。以下是按部门统计的高于总体平均工资的员工人数:
SELECT empDept, count(empID) FROM
(SELECT empID, empDept from TABLE
WHERE empSalary > (SELECT AVG(empSalary) FROM TABLE) aboveAverageEmployees
GROUP BY empDept
塔克斯。比较每个部门的平均工资。但我需要将其与整个表进行比较,而不考虑部门,然后根据每个部门的emp总数进行分组。thanx。。正是我所需要的。比较每个部门的平均工资。但我需要将其与整个表进行比较,而不考虑部门,然后根据每个部门的emp总数进行分组。我将修改答案,但您应该修改问题。这不是您最初要求的。您应该决定使用什么数据库,并适当地标记您的问题。MySQL和SQLServer是完全不同的。