2010-07-28 1 views
0
  1. что запрос вернуть имя и зарплата работника Имея Макс Зарплатачто запрос вернуть имя и зарплата работника Имея Макс Зарплата

+0

Не могли бы вы обновить вопрос со списком столбцов в 'EMPLOYEE' таблицы? В противном случае мы догадываемся об именах столбцов ... Знание базы данных тоже было бы неплохо. –

+0

Я добавил тег 'great-n-per-group'. Следуйте этому тегу, чтобы найти множество примеров решения. –

+3

Что он должен вернуть в присутствии двух одинаково оплачиваемых сотрудников, имеющих самую высокую зарплату? –

ответ

0
Select e.name, e.salary from employee e where 
    not exists (select salary from employee e1 where e.salary < e1.salary) 

Это, конечно, возвращать больше чем одна запись, если есть несколько человек с максимальной зарплатой.

12
SELECT Name, Salary FROM Minions 
WHERE Salary = (SELECT Max(Salary) FROM Minions) 

Обратите внимание, что это будет возвращать более одной строки, если есть более чем один сотрудник, который имеет одинаковую максимальную зарплату

+0

+1: Для вызова таблицы «Миньоны» –

+1

@OMG Ponies: Если вы оставите детали реализации для меня, я буду с ними повеселиться;) –

3
select name, salary from (select * from salary_table order by salary desc limit 1) 
+0

Я не спустил вас вниз, но предполагает использование MySQL, PostgreSQL или SQLite - не будет работать на Oracle или SQL Server. Кроме того, не требуется подзапрос. –

+0

Спасибо за отзыв. Если только человек, который проголосовал за объяснение, почему :) – publicRavi

+1

Я предпочитаю комментировать и обсуждать задолго до того, как я опустил голову. Запрос верен для баз данных, о которых я упоминал, но немного сложнее. Увидев, что все остальные предоставляют конкретные ответы поставщика, +1 –

0

Пару собственных решений

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 
+1

Интересно, что все они, похоже, игнорируют тот факт, что может быть более одного сотрудника с максимальным значением зарплаты. Конечно, вопрос задал «служащий», но на самом деле это могут быть «сотрудники». –

0

Если вы используете базу данных оракула и хотите только один "работник", то:

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; 

SQLFIDDLE

(престижность Neil N для его имени таблицы)

  • SQL Server имеет подобный FIRST_VALUE (или LAST_VALUE) аналитическая функция.
  • PostgreSQL также поддерживает функции окна, включая LAST_VALUE.
1
SELECT FirstName, max(salary) 
FROM Employees 
WHERE salary = (
       SELECT max(salary) 
       FROM employees 
       ) 
GROUP BY FirstName 

работает в SQL SERVER 2012