Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 特定条件的sql查询_Mysql_Sql_Sql Server 2008_Select_Group By - Fatal编程技术网

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是完全不同的。