我有一个员工和工资表,用这种方式定义:
"name" (type: VARCHAR)
"salary" (type: INTEGER)
Run Code Online (Sandbox Code Playgroud)
我可以使用什么查询来获得此表中第二高的薪水?
Daw*_*son 43
这是一个解释关系的人.
Name Salary
Jim 6
Foo 5
Bar 5
Steve 4
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees WHERE salary < (SELECT MAX(salary) FROM employees))
Result --> Bar 5, Foo 5
Run Code Online (Sandbox Code Playgroud)
编辑: 我拿了Manoj的第二篇文章,调整它,使它更具人性化.对我而言,n-1并不直观; 但是,使用我想要的值,2 = 2nd,3 = 3rd等.
/* looking for 2nd highest salary -- notice the '=2' */
SELECT name,salary FROM employees
WHERE salary = (SELECT DISTINCT(salary) FROM employees as e1
WHERE (SELECT COUNT(DISTINCT(salary))=2 FROM employees as e2
WHERE e1.salary <= e2.salary)) ORDER BY name
Result --> Bar 5, Foo 5
Run Code Online (Sandbox Code Playgroud)
Mr.*_*r.M 42
第二高薪的直接答案
SELECT name, salary
FROM employees ORDER BY `employees`.`salary` DESC LIMIT 1 , 1
Run Code Online (Sandbox Code Playgroud)
另一个有趣的方案
SELECT salary
FROM emp
WHERE salary = (SELECT DISTINCT(salary)
FROM emp as e1
WHERE (n) = (SELECT COUNT(DISTINCT(salary))
FROM emp as e2
WHERE e1.salary <= e2.salary))
Run Code Online (Sandbox Code Playgroud)
Sun*_*rma 13
似乎我迟到了回答这个问题.这个衬垫如何获得相同的输出?
SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1,1 ;
Run Code Online (Sandbox Code Playgroud)
create table svalue (
name varchar(5),
value int
) engine = myisam;
insert into svalue value ('aaa',30),('bbb',10),('ccc',30),('ddd',20);
select * from svalue where value = (
select value
from svalue
group by value
order by value desc limit 1,1)
Run Code Online (Sandbox Code Playgroud)
至于第二次:
SELECT name, salary
FROM employee
ORDER BY salary DESC
LIMIT 1 , 1
Run Code Online (Sandbox Code Playgroud)
至于第三个:
SELECT name, salary
FROM employee
ORDER BY salary DESC
LIMIT 2 , 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120663 次 |
| 最近记录: |