mysql - 缩短嵌套 SQL 查询

标签 mysql oracle database

列出工资高于给定员工所在部门平均工资的员工姓名。

我提出了以下解决方案: 名为employee的表中的列名是:emp_id、name、dept、salary。

select name from employee
where salary >
(
select avg(salary) from employee
where dept= (select dept from employee where emp_id = 'a10')
) 
and
dept = (select dept from employee where emp_id = 'a10')
;

我可以将这个查询缩短一点,并期望得到相同的结果吗?

最佳答案

这个查询是特定于 Oracle 的,但它的优点是只访问 employee 表一次:

select name from 
   (select name, 
           salary, 
           avg(salary) over (partition by dept) as avg_salary 
      from employee)
where salary > avg_salary;

关于mysql - 缩短嵌套 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489433/

相关文章:

MySQL 如果我们在包含无效数据的表中设置 SET FOREIGN_KEY_CHECKS=1 会发生什么?

java - 在 Oracle 中设置时间戳

sql - 查询以水平显示输出

php - 数据库对象不工作 (PHP) : "Call to a member function query() on a non-object"

.Net PostgreSQL 连接字符串

MySQL 使用 GROUP BY 对结果进行排名

php - 奇怪的 PHP 字符串错误

sql - 获取组内每个条件的单独计数

PHP checkin checkout 系统

mysql - 如何查询两列中的多个值