从员工表中选择前 10 名薪水
Posted
技术标签:
【中文标题】从员工表中选择前 10 名薪水【英文标题】:Select top 10 salary from employees table 【发布时间】:2014-07-15 20:34:16 【问题描述】:我写了这个 sql 查询:
select first_name, salary
from employees
where salary in( select distinct top(10) salary from employees order by salary disc );
当我运行它时,我得到了这个错误:
SQL 错误:ORA-00907:缺少右括号 00907. 00000 - “缺少右括号”
什么可能导致错误?
【问题讨论】:
disc
是列还是 desc
的拼写错误?这可能是您的错误的原因。
Oracle select query with inner select query error 的可能重复项
在子查询中不带order by子句试试看。
【参考方案1】:
Top-N 查询在 Oracle 中通常以这种方式执行:
select * from (
select first_name, salary
from employees order by salary desc
) where rownum <= 10
这个可以让你获得前 10 名的薪水。
【讨论】:
【参考方案2】:我认为问题在于使用top
,它是 SQL Server 而不是 Oracle。
改用rank
来按顺序获得薪水并获得前10名:
select v.first_name, v.salary
from ( select first_name, salary, rank() over (order by salary desc) r from employees) v
where v.r <= 10
【讨论】:
【参考方案3】:试试 -
SELECT first_name, salary
( select first_name, salary
from employees
order by salary Desc)
where rownum <= 10
【讨论】:
【参考方案4】:以下查询适用于 Oracle。
select * from (select * from emp order by sal desc) where rownum
【讨论】:
【参考方案5】:试试这个 === SELECT first_name,salary FROM employees WHERE Salary IN(从员工中选择薪水 GROUP BY 薪水 ORDER BY 薪水 DESC LIMIT 10);
【讨论】:
LIMIT
用于 mysql,这里是 ORACLE。以上是关于从员工表中选择前 10 名薪水的主要内容,如果未能解决你的问题,请参考以下文章