что запрос вернуть имя и зарплата работника Имея Макс Зарплатачто запрос вернуть имя и зарплата работника Имея Макс Зарплата
ответ
Select e.name, e.salary from employee e where
not exists (select salary from employee e1 where e.salary < e1.salary)
Это, конечно, возвращать больше чем одна запись, если есть несколько человек с максимальной зарплатой.
SELECT Name, Salary FROM Minions
WHERE Salary = (SELECT Max(Salary) FROM Minions)
Обратите внимание, что это будет возвращать более одной строки, если есть более чем один сотрудник, который имеет одинаковую максимальную зарплату
+1: Для вызова таблицы «Миньоны» –
@OMG Ponies: Если вы оставите детали реализации для меня, я буду с ними повеселиться;) –
select name, salary from (select * from salary_table order by salary desc limit 1)
Я не спустил вас вниз, но предполагает использование MySQL, PostgreSQL или SQLite - не будет работать на Oracle или SQL Server. Кроме того, не требуется подзапрос. –
Спасибо за отзыв. Если только человек, который проголосовал за объяснение, почему :) – publicRavi
Я предпочитаю комментировать и обсуждать задолго до того, как я опустил голову. Запрос верен для баз данных, о которых я упоминал, но немного сложнее. Увидев, что все остальные предоставляют конкретные ответы поставщика, +1 –
Пару собственных решений
SELECT TOP 1 [WITH ties] Name, Salary
FROM employee
ORDER BY Salary DESC
SELECT Name, Salary
FROM employee
ORDER BY Salary DESC
LIMIT 1
и А стандарт один
WITH E AS
(
SELECT Name, Salary,
ROW_NUMBER() OVER (ORDER BY Salary DESC) RN /*Or RANK() for ties*/
FROM employee
)
SELECT Name, Salary FROM E WHERE RN=1
Интересно, что все они, похоже, игнорируют тот факт, что может быть более одного сотрудника с максимальным значением зарплаты. Конечно, вопрос задал «служащий», но на самом деле это могут быть «сотрудники». –
Если вы используете базу данных оракула и хотите только один "работник", то:
SELECT MAX(name ) KEEP (DENSE_RANK LAST ORDER BY salary ASC) AS name,
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY salary ASC) AS salary
FROM Minions;
(престижность Neil N для его имени таблицы)
- SQL Server имеет подобный
FIRST_VALUE
(илиLAST_VALUE
) аналитическая функция. - PostgreSQL также поддерживает функции окна, включая
LAST_VALUE
.
SELECT FirstName, max(salary)
FROM Employees
WHERE salary = (
SELECT max(salary)
FROM employees
)
GROUP BY FirstName
работает в SQL SERVER 2012
Не могли бы вы обновить вопрос со списком столбцов в 'EMPLOYEE' таблицы? В противном случае мы догадываемся об именах столбцов ... Знание базы данных тоже было бы неплохо. –
Я добавил тег 'great-n-per-group'. Следуйте этому тегу, чтобы найти множество примеров решения. –
Что он должен вернуть в присутствии двух одинаково оплачиваемых сотрудников, имеющих самую высокую зарплату? –