SQL-запрос: получить всю строку с минимальным значением в таблице - PullRequest
1 голос
/ 20 июля 2011

Каким будет оптимизированный запрос для извлечения различных столбцов строки, в котором содержится минимальное значение для определенного столбца.

Например, для отображения имени и зарплаты всех лиц, которые содержат минимальную зарплату вкатегория постоянных сотрудников из приведенной ниже таблицы, в которой всего три столбца

Employee (Имя, EmployeeType, Salary)

EmployeeType может быть постоянным или временным
Я уже знаю решение, но я думаю, что может быть лучший способ.
Мое решение:

Select E.*  from Employee Where 
Salary = (Select Min(Salary) From Employee Where EmployeeType='P') 
and EmployeeType='P'

Ответы [ 2 ]

5 голосов
/ 20 июля 2011
SELECT TOP 1 *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary ASC

В MySQL вы можете использовать LIMIT 1.В Oracle вы можете использовать внутренний запрос в сочетании с WITH rownum = 1.

. Он всегда будет возвращать одну строку, даже если у нескольких сотрудников есть минимальная зарплата.Вы можете добавить дополнительные столбцы порядка, если хотите указать, какие из этих строк возвращать.

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

SELECT *
FROM Employee
WHERE Salary = (
    SELECT MIN(Salary)
    FROM Empoyee
    WHERE EmployeeType = 'P'
)
AND EmployeeType = 'P'
1 голос
/ 20 июля 2011

Если минимальная зарплата распределяется между несколькими сотрудниками, вы можете получить их все с помощью конструкции TOP (1) WITH TIES:

SELECT TOP (1) WITH TIES *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...