SQL查询:获取表中具有最小值的整行

SQL查询:获取表中具有最小值的整行,sql,tsql,Sql,Tsql,对于提取一行中的各个列(其中包含特定列的最小值),优化的查询是什么 例如,显示下表中持有永久雇员类别中最低工资的所有人员的姓名和工资,下表中只有三列 员工姓名、员工类型、工资 EmployeeType可以是永久的,也可以是临时的 我已经知道了一个解决办法,但我认为可能有更好的办法。 我的解决办法是: Select E.* from Employee Where Salary = (Select Min(Salary) From Employee Where EmployeeType='P')

对于提取一行中的各个列(其中包含特定列的最小值),优化的查询是什么

例如,显示下表中持有永久雇员类别中最低工资的所有人员的姓名和工资,下表中只有三列

员工姓名、员工类型、工资

EmployeeType可以是永久的,也可以是临时的 我已经知道了一个解决办法,但我认为可能有更好的办法。 我的解决办法是:

Select E.*  from Employee Where 
Salary = (Select Min(Salary) From Employee Where EmployeeType='P') 
and EmployeeType='P'
在MySQL中,可以使用limit1。在Oracle中,可以将内部查询与rownum=1结合使用

这将始终返回一行,即使有多个员工共享最低工资。如果要指定要返回的行,可以添加其他排序列

如果您希望返回所有此类行,则OP的查询将是最佳的:

SELECT *
FROM Employee
WHERE Salary = (
    SELECT MIN(Salary)
    FROM Empoyee
    WHERE EmployeeType = 'P'
)
AND EmployeeType = 'P'
在MySQL中,可以使用limit1。在Oracle中,可以将内部查询与rownum=1结合使用

这将始终返回一行,即使有多个员工共享最低工资。如果要指定要返回的行,可以添加其他排序列

如果您希望返回所有此类行,则OP的查询将是最佳的:

SELECT *
FROM Employee
WHERE Salary = (
    SELECT MIN(Salary)
    FROM Empoyee
    WHERE EmployeeType = 'P'
)
AND EmployeeType = 'P'

如果最低工资由多个员工共享,则可以使用TOP 1 WITH TIES结构检索所有员工:

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


如果最低工资由多个员工共享,则可以使用TOP 1 WITH TIES结构检索所有员工:

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


我想你的问题还可以!除了语法错误外:将E.*改为just*@Bohemian:谢谢编辑,E.*只是一种表示我将通过显式提及名称来提取所有列的方式。我曾想过再次避免EmployeeType条件,但找不到比这更好的解决方案。我认为您的查询还可以!除了语法错误:将E.*改为just*@Bohemian:谢谢编辑,E.*只是一种方式,表示我将通过明确提及名称来拉动所有列。我曾想过再次避免EmployeeType条件,但找不到比这更好的解决方案。如果两名员工有最低工资,排名前1的人总是会返回一排,没有冒犯,但我对4个人投票表示惊讶,没有人想到排名前n的问题具有同等价值!我应该更准确地说英语。我仍然可以编辑它。谢谢。如果两名员工有最低工资,排名前1的员工将始终返回一行呢?没有冒犯,但我不太惊讶有4人投票支持这一点,没有人想到排名前n的问题具有同等价值!我应该更准确地说英语。我仍然可以编辑它。谢谢你。