6

我想得到最低工资的员工的姓名。有没有办法只使用一个查询来做到这一点?我在下面给出了我的查询,它不起作用,因为 having 子句需要一个条件。有没有办法在有条款中给出一个条件,以检索具有最低工资的员工姓名?

SELECT first_name,min(salary) as "sal"
FROM Employees
GROUP BY first_name 
having min(salary);
4

7 回答 7

7

怎么用ROWNUM

SELECT *
FROM(SELECT first_name, salary
     FROM Employees
     ORDER BY salary
) WHERE ROWNUM = 1
于 2013-11-04T04:40:01.287 回答
4
SELECT first_name, salary  as "sal" 
FROM   employees
WHERE  salary =(SELECT MIN(salary) 
                FROM   employees);
于 2013-11-04T04:58:28.587 回答
3

试试这个解决方案,灵感来自这里

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;
于 2013-11-14T20:47:43.820 回答
2

用一个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;

SQLFIDDLE

但是,如果有多个人的最低工资相同,那么这只会得到名字按字母顺序排在第一位的人。

您可以获得所有名称,但它确实需要多个SELECT语句:

SELECT first_name, salary
FROM   Employees
WHERE  salary = ( SELECT MIN(salary) FROM Employees ); 

但是拥有多个SELECT语句并不是一件坏事。

SQLFIDDLE

于 2013-11-14T20:04:14.750 回答
1
SELECT TOP 1 WITH TIES *
FROM employees
ORDER BY salary ASC
于 2013-11-04T06:12:39.707 回答
0

如果您需要最低工资的员工,为什么不使用Order By ..

SELECT top 1 first_name,min(salary) as LowestSalary
FROM Employees order by Salary asc
于 2013-11-04T04:41:19.720 回答
0

SELECT first_name,min(salary) as "sal" FROM Employees GROUP BY first_name with min(salary) >0;

于 2019-06-26T15:49:11.603 回答