【发布时间】:2013-11-14 17:12:29
【问题描述】:
我想获取最低工资的员工的姓名。有没有办法只使用一个查询来做到这一点?我在下面给出了我的查询,它不起作用,因为 having 子句需要一个条件。有没有办法在有条款中给出一个条件,以检索具有最低工资的员工姓名?
SELECT first_name,min(salary) as "sal"
FROM Employees
GROUP BY first_name
having min(salary);
【问题讨论】:
我想获取最低工资的员工的姓名。有没有办法只使用一个查询来做到这一点?我在下面给出了我的查询,它不起作用,因为 having 子句需要一个条件。有没有办法在有条款中给出一个条件,以检索具有最低工资的员工姓名?
SELECT first_name,min(salary) as "sal"
FROM Employees
GROUP BY first_name
having min(salary);
【问题讨论】:
用ROWNUM怎么样?
SELECT *
FROM(SELECT first_name, salary
FROM Employees
ORDER BY salary
) WHERE ROWNUM = 1
【讨论】:
SELECT first_name, salary as "sal"
FROM employees
WHERE salary =(SELECT MIN(salary)
FROM employees);
【讨论】:
试试这个解决方案,灵感来自here:
SELECT e1.first_name, e1.salary AS "sal"
FROM Employees e1
LEFT OUTER JOIN Employees e2
ON (e1.id <> e2.id AND e1.salary > e2.salary)
WHERE e2.id IS NULL;
【讨论】:
使用单个 SELECT 语句:
SELECT MIN( first_name ) KEEP ( DENSE_RANK FIRST ORDER BY salary ASC, first_name ASC ) AS first_name,
MIN( salary ) KEEP ( DENSE_RANK FIRST ORDER BY salary ASC, first_name ASC ) AS salary
FROM Employees;
但是,如果有多个人的最低工资相同,那么这只会得到名字按字母顺序排在第一位的人。
你可以得到所有的名字,但它确实需要多个SELECT 语句:
SELECT first_name, salary
FROM Employees
WHERE salary = ( SELECT MIN(salary) FROM Employees );
但是拥有多个SELECT 语句并不是一件坏事。
【讨论】:
SELECT TOP 1 WITH TIES *
FROM employees
ORDER BY salary ASC
【讨论】:
如果您需要最低工资的员工,为什么不使用 Order By ..
SELECT top 1 first_name,min(salary) as LowestSalary
FROM Employees order by Salary asc
【讨论】:
SELECT first_name,min(salary) as "sal" 来自员工 按名字分组 min(salary) >0;
【讨论】: